2011-10-30 38 views
2

我正在運行以下代碼。它的功能是將文本文件拆分爲以'_part'結尾的部分,然後調用帶有標誌的同一腳本來處理文件 - 將內容上傳到Drupal系統。在php中運行shell_exec導致web服務器掛起

發生什麼事是腳本運行並完成工作,所有調用的腳本也完成了,我可以看到結果。但每次運行後,Web服務器都會停止響應。有什麼基本的,我失蹤或做錯了?

if(isset($argv[3])){ 
    $isSplit = $argv[3] == 'true' ? true : false; 
    }  
    if($isSplit){     
    $fileSplitter = new CSVFileParts($fileName); 
    $parts = $fileSplitter->split_file(); 
    echo 'Splited file to '.$parts.' parts'.PHP_EOL; 
    for($part =0; $part < $parts; $part++){    
     echo shell_exec('php Service.php u ./partial_files/'.basename($fileName).'.part_'.$part.' false > /dev/null 2>/dev/null &'); 
    }   
    }else{        
    $log->lwrite('uploading '.$argv[2]); 
    $drupalUploader = new DrupalUploader($fileName, $log); 
    $drupalUploader->upload();   
    } 
+0

你能嘗試回聲了shell_exec('PHP Service.phpü。 /partial_files/'.basename($fileName).'.part_'.$part。'>/dev/null; echo $?'); – Wesley

+0

我也很好奇,如果$部分VAR是你有多少部分或數組的計數。因爲在你的數組中你可以這樣做$ part <$ parts,也許可以試試sizeof($ parts) – Wesley

+0

你確定腳本完成了嗎?你寫了,你可以看到結果,但你怎麼跟蹤腳本完成? – hakre

回答

1

shell_exec — Execute command via shell and return the complete output as a string

了shell_exec預計文件句柄是開放的,但你的一切重定向到/ dev/null,並且卸下。

當您計劃分離的過程,並刪除所有的輸出,你應該使用exec()和escapeshellcmd()將

見:http://www.php.net/manual/en/function.exec.php