2015-02-25 3 views
0

На моем сервере 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, но в этой ситуации использовать этот способ невозможно.

ответ

0

Я никогда не был в состоянии получить мой код работает, но я нашел альтернативный метод из другого ответа на здесь и на основании, что изменил мой код, чтобы использовать следующее, и она работает:

$WshShell = new \COM("WScript.Shell"); 
$oExec = $WshShell->Run($cmd, 0, false); 
+0

пытались ли вы: 'pclose (popen (" start/B ". $ cmd," r "));'? – Anthony

+0

@ Энтони, это именно то, что у меня есть в моем вопросе, если вы посмотрите на код. По какой-то причине это не сработает. – Nate

+0

Нет, у вас есть popen(), затем проверка ошибок, затем pclose(). Я предлагаю pclose (popen()), где popen находится внутри pclose. Если вы посмотрите на код, вы увидите разницу. – Anthony

Смежные вопросы