2

我正在运行以下代码。它所做的是获取一个文本文件,将其拆分为以“_part”结尾的部分,然后调用带有标志的相同脚本来处理文件——将内容上传到 Drupal 系统。

发生的情况是脚本运行并完成工作,所有调用的脚本也完成,我可以看到结果。但每次我运行它后,网络服务器都会停止响应。我有什么基本的遗漏或做错了吗?

  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 回答