2013-08-08 4 views
0

Я новичок в PHP поэтому, пожалуйста, простите меня, если у меня есть глупые ошибки или мое объяснение не понятно ...Delay процесс PHP до предыдущего процесс не был завершен

творю локальный сайт, который управляет несколько файлов и папок. Интерфейс использует Codemines jQuery Form Wizard, который отправляет входные значения в файл process.php, который проходит через ряд операторов «if» на основе выбранных входных значений.

У меня есть форма, правильно отправляющая входные значения с использованием $_SESSION['siteurl'] = $_POST['siteurl'];, и первый процесс отлично работает, который копирует все содержимое папки из одного места назначения в другой (23 Мб содержимого) ... Следующий процесс должен скопируйте другую папку в папку, скопированную на последнем шаге, но это, похоже, не происходит, потому что предыдущий процесс копирования все еще выполняется из-за количества копируемых файлов.

Итак, мой вопрос: как создать паузу между первым процессом копирования и вторым (второй процесс копирования доступен только после завершения первого)?

Я пробовал использовать sleep(4000); и usleep(4000); без везения, но я просто поставил этот код между двумя процессами (не уверен, что это правильно).

Вот PHP код, который я использую как часть моего файла process.php:

if($_SESSION['cmsbranding'] == 'withbranding'){ 
    mkdir("/user/foldername/foldername/$_SESSION[foldername]/", 0700); 

    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); 
    }    
    // Source directory (can be an FTP address) 
    $src = "/copythisfolder/"; 
    // Full path to the destination directory 
    $dst = "/user/foldername/foldername/$_SESSION[foldername]/";    
    set_time_limit(0);    
    recurse_copy($src,$dst); 

    mkdir("/user/foldername/foldername/$_SESSION[foldername]/placesecondfolderinhere/", 0700); 

    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); 
    } 
    sleep(4000); 
// Source directory (can be an FTP address) 
$src = "/copythisfolder-forsecondprocess/"; 
// Full path to the destination directory 
$dst = "/user/foldername/foldername/$_SESSION[foldername]/placesecondfolderinhere/"; 

    set_time_limit(0); 

    recurse_copy($src,$dst); 
} 

Я надеюсь, что это имеет смысл, пожалуйста, не стесняйтесь спросить, если он не делает.

ОБРАТИТЕ ВНИМАНИЕ:

Это страница для управления основные задачи папки для меня только на локальном сервере MAMP, я понимаю, что копирование папки и такие не является хорошей идеей для большинства веб-приложений с общественностью. Это просто инструмент управления для меня, чтобы я работал лично.

PS: Операторы if() все работают нормально, я только вставлял их в сегмент кода, но проблема определенно связана с тем, как происходит копирование первой папки для обработки.

Большое спасибо всем, кто уделяет время, чтобы посмотреть на это для меня.

+0

php не делает parrallelization ... какие части конкретно перекрываются? – Kristian

+1

PHP работают параллельно в общем случае, но если вы используете сеанс, запрос блокируется, когда скрипт переходит к 'session_start()' - сеанс будет запущен только в том случае, если остальные запросы на тот же сеанс завершатся. – Sven

ответ

0

Вы определяете функцию recurse_copy дважды в своем коде. Я удивлен, что он даже бежит.

Плюс, за имя, recurse_copy является рекурсивным. Может ли это повлиять на сроки? Вы не спите между рекурсивными вызовами, которые делает сама функция.

Смежные вопросы