На моем сервере Linux я использую shell_exec()
для запуска сценариев асинхронно. Эта функция недоступна в Windows, которую я использую для разработки, и поэтому я пытаюсь использовать popen()
.Как отлаживать 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, но в этой ситуации использовать этот способ невозможно.
пытались ли вы: 'pclose (popen (" start/B ". $ cmd," r "));'? – Anthony
@ Энтони, это именно то, что у меня есть в моем вопросе, если вы посмотрите на код. По какой-то причине это не сработает. – Nate
Нет, у вас есть popen(), затем проверка ошибок, затем pclose(). Я предлагаю pclose (popen()), где popen находится внутри pclose. Если вы посмотрите на код, вы увидите разницу. – Anthony