2011-10-30 7 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 U:あなたがプロセスを切り離し、すべての出力を削除することを計画したよう

、あなたは、exec()とescapeshellcmd()

参照を使用する必要があります。 /partial_files/'.basename($fileName).'part''.$part。 '>/dev/null; echo $?'); – Wesley

+0

$ parts 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にすべてをリダイレクトし、それを取り外します。 http://www.php.net/manual/en/function.exec.php

関連する問題