2017-01-08 97 views
0

我有一臺Ubuntu 16.10筆記本電腦,用於測試我開發的網站,最近我從Apache2切換到NginX。我使用Netbeans和Xdebug來調試我的PHP腳本。如何獲得Netbeans和Xdebug與NginX合作

使用NginX設置Xdebug的說明看起來很簡單。簡而言之以下行/etc/php/7.0/fpm/conf.d/20-xdebug.ini

zend_extension=/usr/lib/php/20160303/xdebug.so 
xdebug.remote_port=9000 
xdebug.remote_enable=On 
xdebug.remote_connect_back=On 
xdebug.remote_log=/var/log/xdebug.log 

...然後用sudo service nginx restart重啓Nginx的。但這不起作用。

我檢查堆棧溢出的答案,我發現this one,它說我需要把下面的代碼放在一個配置文件中,但它似乎是特定於PHP 5,我正在運行PHP 7.0,也它只涉及一個NginX配置文件,沒有指定哪一個,所以我不知道該把它放在哪裏。

location/{ 
     root /var/www/bresson/web/; 
     include fastcgi_params;  
     fastcgi_param SCRIPT_FILENAME $document_root/dispatch.php; 
     fastcgi_pass unix:/var/run/php5-fpm.sock; 
    } 

如何連接到Xdebug的Nginx的,這樣我可以調試PHP使用Netbeans?

回答

1

找到了答案here

它說,要得到的東西叫「Redis的」,雖然我不能完全肯定這是必要的:

apt-get install php-redis 

在任何情況下,我做到了。下一步是運行此命令:

所有手動編譯指令都可以忽略,因爲所有需要的東西現在都在存儲庫中。我已經安裝了Xdebug,NginX和所有的東西。所以我跳到這一行:

sudo echo "zend_extension=xdebug.so" > /etc/php/7.0/mods-available/xdebug.ini 

但是,長話短說,我發現通過試驗和錯誤,這是不夠的。相反,我不得不打開它,並添加如下內容:通過運行php -m | grep -i xdebug,應返回

ln -sf /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/fpm/conf.d/20-xdebug.ini 
ln -sf /etc/php/7.0/mods-available/xdebug.ini /etc/php/7.0/cli/conf.d/20-xdebug.ini 
service php7.0-fpm restart 

檢查結果:

zend_extension = xdebug.so 
xdebug.remote_enable=1 
xdebug.remote_handler=dbgp 
xdebug.remote_mode=req 
xdebug.remote_host=localhost 
xdebug.remote_port=9000 
xdebug.var_display_max_depth = -1 
xdebug.var_display_max_children = -1 
xdebug.var_display_max_data = -1 
xdebug.idekey = "PHPSTORM" 

在那之後,我跑這些命令

xdebug 
Xdebug 

然後我重新啓動了一切,但這可能不是必需的:

sudo service php7.0-fpm restart 
sudo service nginx restart 

然後我通過在NetBeans中調試一個站點來測試它,它工作正常!

附錄:

我不停地調試我的本地站點時,得到一個503 Bad Gateway錯誤。看起來問題在於Xdebug連接超時。解決方案似乎是爲您正在調試的站點配置文件,例如/etc/nginx/sites-available/local_example.conf,並且您想要將名爲fastcgi_read_timeout的參數添加到PHP部分。例如,這是它現在看起來像在我的網站conf文件:

location ~ \.php$ { 
    try_files $uri =404; 
    fastcgi_split_path_info ^(.+\.php)(/.+)$; 
    fastcgi_pass unix:/var/run/php7.0-fpm.sock; 
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
    include fastcgi_params; 
    fastcgi_read_timeout 600; 
} 

我將它設置爲fastcgi_read_timeout 600;讓我有10分鐘,坐下來,想想我在做什麼,而掛在一個斷點。我尋找更全球化的設置,但無法找到它,所以這是現在爲我工作的解決方案。