2013-08-08 2 views
0

나는 나는 ... 나는 바보 같은 실수를하거나 내 설명이 명확하지 않은 경우 그래서 용서해주십시오 PHP 새로운지연 이전 프로세스가 완료 될 때까지 PHP 프로세스

나는를 제어하는 ​​로컬 사이트를 만드는 중이라서 파일 및 폴더가 거의 없습니다. 인터페이스는 Codemines jQuery Form Wizard를 사용하여 선택된 입력 값을 기반으로 일련의 'if'문을 통해 실행되는 process.php 파일에 입력 값을 보냅니다.

$_SESSION['siteurl'] = $_POST['siteurl'];을 사용하여 입력 값을 올바르게 보내고 첫 번째 프로세스가 폴더의 전체 내용을 한 대상에서 다른 대상 (23MB 용량)으로 복사하는 데 적합합니다 ... 다음 프로세스는 다음과 같습니다. 마지막 단계에서 복사 한 폴더에 다른 폴더를 복사하지만 복사되는 파일의 양 때문에 이전 복사 프로세스가 진행 중이므로 이런 일이 발생하지 않는 것 같습니다.

제 질문은 첫 번째 복사 프로세스와 두 번째 복사 작업 사이에 일시 중지를 만들 수있는 방법입니다. 첫 번째 복사 프로세스는 첫 번째 복사 프로세스 만 완료된 후에 만 ​​사용할 수 있습니까?

나는 행운을 가지고 sleep(4000);usleep(4000);을 사용해 보았습니다.하지만이 코드를 두 프로세스 사이에 넣었습니다 (올바른지 확실하지 않음).

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

나는이 말이 희망, 그렇지 않은 경우 주저하지 말아 주시기 바랍니다 : 여기에

내가 내 process.php 파일의 한 부분으로 사용하고있는 PHP 코드입니다.

주의 사항 :

이 로컬 MAMP 서버에 혼자 나를 위해 몇 가지 기본적인 폴더 작업을 관리하는 페이지입니다, 나는 복사 폴더와 같은 대부분의 공공 웹 애플리케이션을위한 좋은 생각이 아니라는 것을 알고 있습니다. 이것은 개인적으로 운영되는 관리 도구 일뿐입니다.

추신 : if() 문 모두 잘 작동하지만 코드 세그먼트에 붙여 넣었지만 첫 번째 폴더를 복사하는 과정과 관련이 있습니다.

저를보기 위해 시간을 할애 해 주셔서 감사합니다.

+0

PHP는 parrallelization을하지 않습니다 ... 어떤 부분이 겹치는 부분입니까? – Kristian

+1

PHP는 일반적인 경우에 병렬로 작동하지만 세션을 사용하는 경우 스크립트가'session_start()'에 도달하면 요청이 잠겨 - 같은 세션에 대한 다른 요청이 끝난 경우에만 세션이 시작됩니다. – Sven

답변

0

코드에서 recurse_copy 함수를 두 번 정의하고 있습니다. 나는 그것이 심지어 뛰는 데에 놀란다.

게다가 이름별로 recurse_copy는 재귀 적입니다. 그것이 타이밍에 영향을 미칠 수 있습니까? 함수가 스스로 호출하는 재귀 호출 간에는 자지 않습니다.

관련 문제