延迟PHP进程直到上一个进程完成

时间:2013-08-08 23:12:44

标签: php jquery delay django-formwizard

我是PHP新手所以请原谅我,如果我犯了愚蠢的错误,或者我的解释不明确......

我正在制作一个控制一些文件和文件夹的本地网站。该接口使用Codemines jQuery Form Wizard,它将输入值发送到我的process.php文件,该文件根据所选的输入值运行一系列“if”语句。

我的表单使用$_SESSION['siteurl'] = $_POST['siteurl'];正确发送输入值,第一个进程正常工作,即将文件夹的全部内容从一个目标复制到另一个目标(23mb内容)...下一个进程应该将另一个文件夹复制到最后一步复制的文件夹中,但这似乎不会发生,因为由于复制的文件数量,以前的复制过程仍在进行中。

所以我的问题是,如何在第一个复制过程和第二个复制过程之间创建暂停(第二个复制过程仅在第一个复制过程完成后才可用)?

我尝试过使用sleep(4000);usleep(4000);没有运气,但我只是将代码放在两个进程之间(不确定这是否正确)。

以下是我作为process.php文件的一部分使用的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服务器上单独管理一些基本文件夹任务的页面,我知道复制文件夹等对于大多数公共Web应用程序来说并不是一个好主意。这只是我个人管理的管理工具。

PS:if()语句都运行正常,我只粘贴在一段代码中,但问题肯定与复制第一个文件夹的过程有关。

非常感谢任何花时间为我看这个的人。

1 个答案:

答案 0 :(得分:0)

您在代码中定义了两次函数recurse_copy。我甚至惊讶它甚至跑了。

另外,根据名称,recurse_copy是递归的。这会对时间产生影响吗?你不会在函数对自身的递归调用之间休眠。