Копирование...

KORLEONE

Писатель
Регистрация
22 Мар 2012
Сообщения
1
Реакции
0
Смысл этого бреда в том, что он должен копировать всю папку целиком и кидать по заданному пути. Все так и работает Но! он не копирует папки содержащиеся в данной папке :

home/cs/text.doc - DONE!

а,

home/cs/enf/text.doc - ERROR!

У меня такое чувство, что где-то что-то не так =/

И попутно, удаление предыдущих файлов про новом копирование...

PHP:
<?php
 
 
include("bd.php");
include("start.php");
include("config.php");
 
.
.
.
 
$old_dir = "home/cs/";
$new_dir = "home/servers/$login/cs/$port/";
 
mkdir($new_dir,0755);
$dir = opendir($old_dir);
while($file = readdir($dir))
{
    if(is_file($old_dir."/".$file))
    {
    $cont = file_get_contents($old_dir."/".$file);
    file_put_contents($new_dir."/".$file, $cont);
    }
}
 
Необходимо делать через функцию, пример:
PHP:
<?
$sep = DIRECTORY_SEPARATOR;
function recurse ($dir) { // Рекурсивный(с поддиректориями) обход папки $dir
    global $sep;
    // Пробуем открыть директорию
    $df=@opendir($dir);
    if (!$df) {
        echo "Unable to open ".$dir."\r\n";
        return false;
    }
    while (FALSE !== ($file = readdir($df)))  {
        if (is_dir($dir.$sep.$file) && $file != "." && $file != "..") {
            recurse ($dir.$sep.$file); // Проверит является ли объект папкой, если да запустит саму же себя для объекта сего
        }
        elseif ($file != "." && $file != ".."){
            $full_path = $dir.$sep.$file;
            //совершаем действа над файлом
        }
    }
    closedir($df);
}
recurse ($dir_with_files);
 
PHP:
is_dir($new_dir) || mkdir($new_dir,0755,true);
shell_exec('cp -R '.rtrim($old_dir,'/').'/* '.$new_dir.' &');

cmd в фоновом процессе
 
Необходимо делать через функцию, пример:
PHP:
<?
$sep = DIRECTORY_SEPARATOR;
function recurse ($dir) { // Рекурсивный(с поддиректориями) обход папки $dir
    global $sep;
    // Пробуем открыть директорию
    $df=@opendir($dir);
    if (!$df) {
        echo "Unable to open ".$dir."\r\n";
        return false;
    }
    while (FALSE !== ($file = readdir($df)))  {
        if (is_dir($dir.$sep.$file) && $file != "." && $file != "..") {
            recurse ($dir.$sep.$file); // Проверит является ли объект папкой, если да запустит саму же себя для объекта сего
        }
        elseif ($file != "." && $file != ".."){
            $full_path = $dir.$sep.$file;
            //совершаем действа над файлом
        }
    }
    closedir($df);
}
recurse ($dir_with_files);



:D я завис) Я впервые о рекрусии слышу.
Мне мало понятно что вы тут написали т.к я с файлами работаю впервые, сижу - думаю... что да как)
А можно это как-нибудь попроще сделать? Перенести всю папку целиком ?
 
PHP:
$old_dir = "home/cs/";
$new_dir = "home/servers/$login/cs/$port/";
 
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($old_dir)) as $f) if($f->isFile()) {
  $f_name=rtrim($new_dir,'/').next(explode(realpath($old_dir),$f->getRealPath(),2));
  is_dir(dirname($f_name)) || mkdir(dirname($f_name),0755,true);
  copy($f->getPathname(),$f_name);
}

без общепринятой рекурсии с readdir
 
//совершаем действа над файлом
перед этим нужно проверять на существование папки в месте назначения (куда копируется)...

P.S. Пиши в txt файл команды:
Код:
cp -R /var/dir/from/ /var/dir/to/

Потом Крон:
Код:
if [[ -s /dir/command.txt ]]
then
    cat /dir/command.txt | sh
fi;
echo "" > /dir/command.txt
 
Назад
Сверху