簡體   English   中英

調用exec時,PHP調試器掛起('php ...')

[英]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已經很忙,所以內存腳本停頓,外部腳本的執行無法繼續。

要解決這個問題:

  1. 注釋掉php ini中的xdebug設置並檢查環境變量XDEBUG_CONFIG是否包含任何內容
  2. 使用xdebug參數啟動主腳本(php -dxdebug.remote_enable = 1 -dxdebug.remote_mode = req -dxdebug.remote_port = 9000 -dxdebug.remote_host = 127.0.0.1)
  3. 執行沒有xdebug參數的第二個腳本:exec('php script.php')

要調試內部腳本,請在沒有xdebug的情況下啟動第一個腳本,使用xdebug啟動exec,反之亦然。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM