У меня есть PHP script, в котором в какой-то момент я вызываю exec() на другом PHP скрипт. Это работает отлично, но он зависает при использовании отладчика XDebug в NetBeans. Это вызывает у меня всевозможные проблемы, поскольку я не могу отладить все приложение.
Вот тривиальный пример:
test1.php
<?php
$output = array();
$status = 0;
exec('echo "Running inside test 1"', $output, $status);
exec('php ' . __DIR__ . '/test2.php', $output, $status); // Debugger hangs here
var_dump($output);
var_dump($status);
?>
test2.php
<?php
echo "Running inside test 2" . PHP_EOL;
?>
Если я запустил test1.php, он завершится и выдает ожидаемый результат.
Если я отлаживаю test1.php, он зависает в строке exec ('php...').
Я пробовал это с помощью shell_exec и получал ту же проблему. Я также попробовал exec'ing в .sh файле или другом исполняемом файле без каких-либо проблем.
Сначала я подумал, что xdebug каким-то образом присоединяется к новому процессу PHP, который запускается exec и блокирует его, но я проверил свой php.ini и имел xdebug.remote_autostart=off
.
Я знаю, что вызов PHP script через exec() - странный способ делать вещи; это фактически внешний файл PHAR, который мы исполняем в реальной кодовой базе, но тривиальный пример выше имеет тот же самый симптом, поэтому я предполагаю, что это та же проблема.
В случае, если это имеет значение, я использую PHP 5.5.13, Xdebug 2.2.3, Netbeans 7.3.1, Ubuntu 12.0.4.