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

Тема в разделе "Как сделать...", создана пользователем KORLEONE, 17 апр 2012.

  1. KORLEONE

    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);
        }
    }
     
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.517
    Симпатии:
    1.365
    Необходимо делать через функцию, пример:
    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);
     
  3. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    PHP:
    is_dir($new_dir) || mkdir($new_dir,0755,true);
    shell_exec('cp -R '.rtrim($old_dir,'/').'/* '.$new_dir.' &');
    cmd в фоновом процессе
     
    latteo нравится это.
  4. KORLEONE

    KORLEONE Писатель

    Регистр.:
    22 мар 2012
    Сообщения:
    1
    Симпатии:
    0


    :D я завис) Я впервые о рекрусии слышу.
    Мне мало понятно что вы тут написали т.к я с файлами работаю впервые, сижу - думаю... что да как)
    А можно это как-нибудь попроще сделать? Перенести всю папку целиком ?
     
  5. KORLEONE

    KORLEONE Писатель

    Регистр.:
    22 мар 2012
    Сообщения:
    1
    Симпатии:
    0
    cmd - это не вариант.
     
  6. pitkina

    pitkina

    Регистр.:
    1 апр 2007
    Сообщения:
    253
    Симпатии:
    176
    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
     
    KORLEONE нравится это.
  7. neodev

    neodev Создатель

    Регистр.:
    26 мар 2012
    Сообщения:
    24
    Симпатии:
    4
    перед этим нужно проверять на существование папки в месте назначения (куда копируется)...

    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