Я испытываю интересную странную проблему с shell_exec …
Я разрабатываю PHP веб-приложение, которое использует приложение C ++ для расчетов. Сервер работает под Linux, и я использую shell_exec для выполнения программы на C ++. Я обновил версию своего приложения на C ++ и с тех пор shell_exec не работает, но
Вы когда-нибудь сталкивались с подобной проблемой?
Возможно ли, что в shell_exec может возникнуть проблема, которая при стандартном выполнении из консоли не возникает?
class LauncherManager extends Nette\Object {
private $wwwDir;
private $db;
private $f;
public function __construct($wwwDir, \DibiConnection $db) {
$this->wwwDir = $wwwDir;
$this->db = $db;
$this->f = (new Dao\DaoFactory())->setDb($db);
}
public function execMeasurement($measurementId) {
$this->execGenetrac(" -m $measurementId");
}
public function execSamples($analysisId) {
$this->execGenetrac(" -s $analysisId");
}
public function execAnalysis($analysisId) {
$this->execGenetrac(" -a $analysisId");
}
public function execGenetrac($params) {
// Check path to genetrac can be set
$path = $this->wwwDir . "/genetrac";
$this->checkPathExist($path);
// Check library path
$lib = './lib';
$expl = 'export LD_LIBRARY_PATH="' . $lib . '"';
$this->checkPathExist($path . "/" . $lib);
// Check genetrac executable exist
$this->checkPathExist($path . "/genetrac");
// Launch genetrac with parameters
$this->exec("cd $path; $expl; ./genetrac $params");
}
public function exec($command) {
return shell_exec($command);
}
...
shell_exec возвращает NULL в двух ситуациях:
Чтобы различать эти ситуации, используйте Exec () вместо:
public function exec($command) {
exec($command, $arrOutputLines, $intReturnStatus);
return join("", $arrOutputLines);
}
Вы можете отладить этот код с помощью var_dump’ing $ arrOutputLines и $ intReturnStatus (это массив строк, которые распечатывает ваша программа, и числовой статус выхода вашей программы (0 обычно означает «ОК», ненулевое значение означает «ошибка»)).
Других решений пока нет …