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

Мой вклад

$src = "http://$_SERVER[HTTP_HOST]/_template/function/";
$dst = "http://$_SERVER[HTTP_HOST]/city/department/function/";
recurse_copy($src, $dst);

Я также попробовал это

$src = "$_SERVER[DOCUMENT_ROOT]/_template/function/"; // And so on...

Функция выполняется, но ничего не копируется.

Есть идеи, что может быть не так?

РЕШИТЬ

Рабочий раствор

Вместе с

$src = "$_SERVER[DOCUMENT_ROOT]/_template/function/";
$dst = "$_SERVER[DOCUMENT_ROOT]/city/department/function/";
recurse_copy($src, $dst);

0

Решение

Это не проверено, но я думаю, что проблема может заключаться в том, что целевой каталог не обязательно создается перед попыткой скопировать в него файлы. Кусок кода, который создает целевой каталог, потребует путь к папке, а не полный путь к файлу — следовательно, с использованием dirname( $dst )

if( !defined('DS') ) define( 'DS', DIRECTORY_SEPARATOR );

function recurse_copy( $src, $dst ) {

$dir = opendir( $src );
@mkdir( dirname( $dst ) );

while( false !== ( $file = readdir( $dir ) ) ) {
if( $file != '.' && $file != '..' ) {
if( is_dir( $src . DS . $file ) ) {
recurse_copy( $src . DS . $file, $dst . DS . $file );
} else {
copy( $src . DS . $file, $dst . DS . $file );
}
}
}
closedir( $dir );
}
0

Другие решения

Используйте локальные пути

$src= "_template/function/";
$dst= "city/department/function/";
recurse_copy($src, $dst);

copy работает локально на вашем сервере. Вы пытаетесь копировать, используя схему HTTP, она не работает таким образом.

0

По вопросам рекламы [email protected]