Intereting Posts
WordPress Неустранимая ошибка: допустимый размер памяти 536870912 байт исчерпан (пытался выделить 77 байт) в wp-includes / wp-db.php в строке 1832 CakePHP запрос ближайшей долготы широты из базы данных Проектирование баз данных для голосовых кнопок «Включить php-файл с html-кодом» для работы с ответом ajax Sublime Text 3 – PHP Build System Загрузка файла PHP Как мы можем назвать функции Php на основе сценария Java-кода If-else? Как использовать конфигурационный файл YAML в Silex Framework Woocommerce отключает автоматическое изменение состояния заказа в ожидании-> обработки Разница в области переменных между областью PHP и C: не совсем то же самое? Как сделать контроллеры, модели, просматривать внешнюю папку приложения в Lavarel 4? Преобразование RAW-фотографий в JPEG в linux / php Отображать значения, указанные в таблице 2, но НЕ в таблице 1 Преобразовать флажок в раскрывающийся список с помощью PHP Получение столбца базы данных с помощью JSON

Скопировать все файлы и папки из одного каталога в другой каталог PHP

У меня есть каталог под названием «mysourcedir», у которого есть файлы и папки sonme. поэтому я хочу скопировать весь контент из этого каталога в другую «папку назначения» на сервере Linux с помощью PHP.

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 ); } } 

Я пытаюсь этот код, но он создает некоторую проблему, он создает каталог «mysourcedir» в месте назначения. Я ожидаю, что просто скопирую все файлы и папки в пункт назначения. Пожалуйста, предложите

Привет, небольшие разработчики 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 Lister <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 переменные с тем же именем, только для того, чтобы их отличить. Просмотрите комментарии пользователей на http://www.php.net/copy для других возможностей.

Я думаю, что $ d-> read () вернет также имя родителя и шляпу, поэтому вы создаете его снова в целевом каталоге.

попробуйте запустить cp -a. Это заботится о сохранении модов и разрешений, и все такое. cp -al сделает ферму жестких ссылок.

для сервера Windows:

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

для сервера linux:

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