2

次のコードを実行しています。これが行うことは、テキスト ファイルを取得し、それを「_part」で終わる部分に分割し、フラグを付けて同じスクリプトを呼び出してファイルを処理し、コンテンツを Drupal システムにアップロードすることです。

何が起こるかというと、スクリプトが実行されて作業が終了し、呼び出されたすべてのスクリプトも終了し、結果を確認できます。しかし、実行するたびに、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();        
  }
4

1 に答える 1

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

于 2011-10-31T15:34:35.740 に答える