來自NetBeans官網的幫助文檔:
https://netbeans.org/kb/docs/php/debugging_zh_CN.html
但具體問題,我們還是要說下
准備工作
本地部署的server環境
下載與php版本對應的xdebug http://www.xdebug.org
配置php
下載xdebug后,在php.ini 中配置xdebug
zend_extension=php_xdebug-2.4.1-7.0-vc14-nts.dll xdebug.remote_port=9001 xdebug.remote_enable=1 xdebug.remote_host=127.0.0.1 xdebug.remote_autostart=1 xdebug.idekey="netbeans-xdebug"
這一步非常重要,因為坑就在這,當配置中擴展為如下的配置時,phpinfo 顯示是正確的
extension=php_xdebug-2.4.1-7.0-vc14-nts.dll
但當我們NetBeans調試php時,一直提示“等待NetBeans連接xdebug”
所以,我們要使用命令行查看已經加載的模塊,查看xdebug是否正確加載
php -m
當提示:PHP Warning: Xdebug MUST be loaded as a Zend extension in Unknown on line 0
意思就是xdebug必須加載到zend modules的擴展中
extension意為基於php引擎的擴展
zend_extension意為基於zend引擎的擴展
所以 正確的方法是
zend_extension=php_xdebug-2.4.1-7.0-vc14-nts.dll
在php.ini 中還要設置
output_buffering = Off
配置NetBeans
在NetBeans的 工具-選擇-php 中配置 (本人NetBeans版本8.0.2)
在這里面也有個坑
就是調試器端口, 網上一般都是9000,但是有沒有考慮用Nginx的感受,在用nginx作為服務器代理的時候,nginx一般使用的就是9000
server { listen 80; server_name web.com; root "F:/web"; location / { index index.html index.htm index.php; autoindex on; if (!-e $request_filename){ rewrite ^/(.*) /index.php?r=$1 last; } } location ~ \.php(.*)$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_split_path_info ^((?U).+\.php)(/?.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; include fastcgi_params; } }
這就是為什么我們在配置php的xdebug時候使用9001端口, (php.ini 中的端口要與NetBeans中的調試器端口一致)
會話ID 與 xdebug.idekey 保持一致
不然同樣提示:“等待NetBeans連接xdebug”
NetBeans斷點調試php
這一步應該不用多說,只要用過NetBeans就知道如何調試,要說明一點,按F7 是斷點的一步步調試
參考:
http://blog.csdn.net/21aspnet/article/details/47756651
http://www.cnblogs.com/zhepama/p/3541683.html