[英]PHP Debugger hangs when calling exec('php …')
我有一個PHP腳本,在某一點上,我在另一個PHP腳本上調用exec()。 這非常正常,但在NetBeans中使用XDebug調試器時會掛起。 這導致了各種各樣的問題,因為我無法調試整個應用程序。
這是一個簡單的例子:
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嘗試了這個,並得到了同樣的問題。 我也嘗試過對.sh文件或其他可執行文件的執行,沒有任何問題。
起初我認為xdebug以某種方式附加到由exec啟動並鎖定它的新PHP進程,但我檢查了我的php.ini並且xdebug.remote_autostart=off
。
我知道通過exec()調用PHP腳本是一種奇怪的處理方式; 它實際上是一個外部提供的PHAR文件,我們在實際的代碼庫中執行,但上面的小例子有相同的症狀,所以我假設它是同樣的問題。
如果它是相關的,我使用PHP 5.5.13,Xdebug 2.2.3,Netbeans 7.3.1,Ubuntu 12.0.4。
發生這種情況是因為當你執行第二個腳本時,xdebug已經很忙,所以內存腳本停頓,外部腳本的執行無法繼續。
要解決這個問題:
要調試內部腳本,請在沒有xdebug的情況下啟動第一個腳本,使用xdebug啟動exec,反之亦然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.