将所有文件和文件夹从一个目录复制到另一个目录PHP

我有名为“mysourcedir”的目录,它有sonme文件和文件夹。 所以我想从这个目录中的所有内容复制到使用PHP的Linux服务器上的其他“目标文件夹”。

function full_copy( $source, $target ) { if ( is_dir( $source ) ) { @mkdir( $target ); $d = dir( $source ); while ( FALSE !== ( $entry = $d->read() ) ) { if ( $entry == '.' || $entry == '..' ) { continue; } $Entry = $source . '/' . $entry; if ( is_dir( $Entry ) ) { $this->full_copy( $Entry, $target . '/' . $entry ); continue; } copy( $Entry, $target . '/' . $entry ); } $d->close(); }else { copy( $source, $target ); } } 

我正在尝试这个代码,但它有一些问题,它在目标位置创build目录“mysourcedir”。 我期待只复制目的地的所有文件和文件夹。 请build议

Solutions Collecting From Web of "将所有文件和文件夹从一个目录复制到另一个目录PHP"

你好,那里的小php开发人员这不是一个问题,而是一个关于如何将文件从一个文件夹复制到另一个问题的答案。 我遇到过互联网,一些开发人员使用rename()而不是copy()将文件从一个目录移动到另一个目录。 这是简单的工作代码。 测试和工作像魅力。

<===========================魔术==================== ========>

 <?php $dir = "path/to/targetFiles/"; $dirNew="path/to/newFilesFolder/"; // Open a known directory, and proceed to read its contents if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { //exclude unwanted if ($file==".") continue; if ($file=="..")continue; //if ($file=="index.php") continue; for example if you have index.php in the folder if (copy("$dir/$file","$dirNew/$file")) { echo "Files Copyed Successfully"; //echo "<img src=$dirNew/$file />"; //if files you are moving are images you can print it from //new folder to be sure they are there } else {echo "File Not Copy";} } closedir($dh); } } ?> 
 class FolderCopy { public static function copyFolder($src, $dest) { $path = realpath($src); $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); /** SplFileInfo $object*/ foreach($objects as $name => $object) { $startsAt = substr(dirname($name), strlen($src)); self::mkDir($dest.$startsAt); if(is_writable($dest.$startsAt) and $object->isFile()) { copy((string)$name, $dest.$startsAt.DIRECTORY_SEPARATOR.basename($name)); } } } private static function mkDir($folder, $perm=0777) { if(!is_dir($folder)) { mkdir($folder, $perm); } } } 

FolderCopy :: copyFolder(dirname(dirname( FILE ))。“/ images”,dirname( FILE )。“/ test”);

这是我的建议。

 <?php /** * Copy a file, or recursively copy a folder and its contents * * @author Aidan listr <aidan@php.net> * @version 1.0.1 * @param string $source Source path * @param string $dest Destination path * @return bool Returns TRUE on success, FALSE on failure */ function copyr($source, $dest) { // Simple copy for a file if (is_file($source)) { chmod($dest, 777); return copy($source, $dest); } // Make destination directory if (!is_dir($dest)) { mkdir($dest); } chmod($dest, 777); // Loop through the folder $dir = dir($source); while (false !== $entry = $dir->read()) { // Skip pointers if ($entry == '.' || $entry == '..') { continue; } // Deep copy directories if ($dest !== "$source/$entry") { copyr("$source/$entry", "$dest/$entry"); } } // Clean up $dir->close(); return true; } ?> 

你可能只想把这条线向下移动,就像这样:

 function full_copy( $source, $target ) { if ( is_dir( $source ) ) { $d = dir( $source ); while ( FALSE !== ( $entry = $d->read() ) ) { if ( $entry == '.' || $entry == '..' ) { continue; } $Entry = $source . '/' . $entry; if ( is_dir( $Entry ) ) { @mkdir( $Entry ); $this->full_copy( $Entry, $target . '/' . $entry ); continue; } copy( $Entry, $target . '/' . $entry ); } $d->close(); }else { copy( $source, $target ); } 

虽然个人,我会避免使用2个变量同名只有captilisation区分它们。 请检查http://www.php.net/copy上的用户意见以了解其他可能性&#x3002;

我认为$ d-> read()将返回的父母的名字,帽子是为什么你要在目标目录中再次创建它。

尝试运行cp -a。 这需要保留mod时间和权限,以及所有这些。 cp -al将建立一个硬链接场。

对于Windows服务器:

 shell_exec('xcopy \\old\\folder \\new\\folder /s /e /y /i'); 

对于linux服务器:

 shell_exec('cp -R /old/folder /new/folder');