запуск shell_exec в php приводит к зависанию веб-сервера - PullRequest
2 голосов
/ 30 октября 2011

Я использую следующий код.Он берет текстовый файл, разбивает его на части, оканчивающиеся на конец _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();        
  }

1 Ответ

1 голос
/ 31 октября 2011

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

...