На моем сервере Linux я использую shell_exec()
запускать скрипты асинхронно. Эта функция недоступна в Windows, которую я использую для разработки, и поэтому я пытаюсь использовать popen()
вместо.
Я использую Windows 10 x64, WampServer 2.5 x32 (PHP 5.5.12).
У меня есть следующий код в файле PHP:
$cmd = '"C:\wamp\bin\php\php5.5.12\php.exe" "C:\wamp\www\path\to\file.php" "arg1" "arg2"';
echo 'Running on DEV MACHINE: ' . $cmd . PHP_EOL;
$handle = popen("start /B " . $cmd, "r");
if ($handle === FALSE) {
die("Unable to execute $cmd");
}
pclose($handle);
Сценарий выполняется без ошибок, но файлы PHP никогда не запускаются. Я знаю, что они не запускаются, потому что я поместил SQL-запрос в самый верх, чтобы обновить поле в базе данных, чтобы указать, что они были запущены.
Как вы можете видеть в приведенном выше коде, я распечатываю команду, передаваемую popen()
, Если я вставлю эту команду в командную строку и выполню ее, сценарии будут работать нормально. Это доказывает, что проблема заключается в popen()
,
Я использую popen()
как-то неправильно? Как я могу отладить, в чем проблема? Обычно я отлаживаю с помощью XDebug, но в этой ситуации нет возможности использовать это.
Мне никогда не удавалось заставить мой код работать, но я нашел альтернативный метод из другого ответа здесь, и на его основе изменился мой код для использования следующего, и он работает:
$WshShell = new \COM("WScript.Shell");
$oExec = $WshShell->Run($cmd, 0, false);
Других решений пока нет …