$base = dirname(__FILE__).'/themes/';
$target = dirname( STYLESHEETPATH ).'/';
$directory_folders = new DirectoryIterator($base);
foreach ($directory_folders as $folder)
{
if (!$folder->isDot()) {
echo '<p>source: '.$folder->getRealPath();
//returns: C:\xampplite\htdocs\test\wp-content\plugins\test\themes\testtheme-1
echo '<br>target: '.$target;
//returns: C:\xampplite\htdocs\test/wp-content/themes/
copy($folder->getRealPath(), $target);
//returns: Error. The first argument to copy() function cannot be a directory
}
}die;
更新:在Pascal建议的答案中,这是我修改过的代码。这很有效。
function recurse_copy(){
$src = dirname(__FILE__).'/themes/';
$dst = dirname( STYLESHEETPATH ).'/';
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) )
{
if (( $file != '.' ) && ( $file != '..' ))
{
if ( is_dir($src . '/' . $file) ) {
recurse_copy_recurse($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
function recurse_copy_recurse($src,$dst){
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) )
{
if (( $file != '.' ) && ( $file != '..' ))
{
if ( is_dir($src . '/' . $file) ) {
recurse_copy_recurse($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
答案 0 :(得分:8)
不,copy()
函数不是递归的:它无法复制文件夹及其内容。
但是,如果您查看该手册页上的用户注释,您会发现一些递归实现的提议。
例如,here's a recursive function proposed by gimmicklessgpt (引用他的帖子):
<?php
function recurse_copy($src,$dst) {
$dir = opendir($src);
@mkdir($dst);
while(false !== ( $file = readdir($dir)) ) {
if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) {
recurse_copy($src . '/' . $file,$dst . '/' . $file);
}
else {
copy($src . '/' . $file,$dst . '/' . $file);
}
}
}
closedir($dir);
}
?>
编辑问题后进行编辑:
您正在调用函数传递参数:
recurse_copy($src . '/' . $file,$dst . '/' . $file);
但是你的函数定义为不带参数:
function recurse_copy(){
$src = dirname(__FILE__).'/themes/';
$dst = dirname( STYLESHEETPATH ).'/';
...
您应该更正函数的定义,因此它需要参数 - 而不是在函数内部初始化$src
和$dst
,而是在第一次调用时。
答案 1 :(得分:2)