我在php.ini
中设置Debug config
和phpstorm
。尝试使用以下命令在phpstorm事件日志中调试php脚本输出:
"Error running script.php: Port 9000 is busy"
结束php.ini:
[XDebug]
zend_extension="/usr/lib/php5/20090626+lfs/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port="9000" (the default port is 9000)
xdebug.profiler_enable=1
xdebug.profiler_enable_trigger = 1
xdebug.profiler_output_dir="/etc/php5/xdebug/profiler_output_dir"
pStorm中的调试端口也设置在9000. netstat -na
输出:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
如果我设置为其他端口怎么办?例如,将其设置为10001
似乎可以完成工作。或者只是如何让它正常工作。我不确定我是否理解xDebug
是如何工作的。它就像在phpstorm中运行Debug("script.php")(Shift+F9)
并在文件中设置断点?
有人有想法吗?
修改
自: http://xdebug.org/docs/remote
xdebug.remote_port
Type: integer, Default value: 9000
The port to which Xdebug tries to connect on the remote host. Port 9000 is the default for both the client and the bundled debugclient. As many clients use this port number, it is best to leave this setting unchanged.
如果我更改9000以外的端口怎么办?也许超过50k的东西。
答案 0 :(得分:11)
在端口9000上运行的进程可能是PhpStorm本身。
检查Jacob提到的当前使用的端口(在Windows cmd:netstat -a -b
上):
如果:9000 下列出 PhpStorm.exe ,您只需在设置>中更改内置服务器的端口即可构建,执行,部署> 调试器到例如 63342 (这是我的队友PhpStorm安装的默认设置)。
答案 1 :(得分:5)
基本上其他一些进程正在使用9000并且不使用它,通常对我来说同时运行另一个IDE
Windows修复 - >
打开cmd.exe
netstat -o
C:\Users\AMC75>netstat -o
Active Connections
Proto Local Address Foreign Address State PID
TCP 10.6.176.132:27018 livlt0124661:55375 ESTABLISHED 11104
TCP 10.6.176.132:49271 chilynfe01:5061 ESTABLISHED 10120
TCP 10.6.176.132:49379 hhefs14:netbios-ssn ESTABLISHED 4
TCP 10.6.176.132:49383 chifs08:netbios-ssn ESTABLISHED 4
TCP 10.6.176.132:51034 157.55.56.143:40002 ESTABLISHED 11104
TCP 10.6.176.132:51038 db3msgr6011007:https ESTABLISHED 11104
TCP 10.6.176.132:51049 wb-in-f125:5222 ESTABLISHED 10860
TCP 10.6.176.132:51282 wpapp020:50124 ESTABLISHED 848
TCP 10.6.176.132:53014 ec2-107-23-104-135:https ESTABLISHED 10860
TCP 10.6.176.132:53015 ec2-107-23-104-135:https ESTABLISHED 10860
TCP 10.6.176.132:54774 157.56.116.205:12350 ESTABLISHED 11104
TCP 10.6.176.132:54822 a23-198-48-60:https CLOSE_WAIT 7500
TCP 10.6.176.132:55166 upmon070:3306 ESTABLISHED 2652
TCP 10.6.176.132:55261 lhr08s03-in-f9:http ESTABLISHED 10860
TCP 10.6.176.132:55570 upmon070:3306 ESTABLISHED 10980
..... BLAH BLAH BLAH
taskkill / PID XXXX
答案 2 :(得分:4)
无法识别lsof和netstat在 9000 端口上运行的进程的pid。临时最简单的解决方案只是更改phpstorm
和php.ini
中的端口以获取未实际使用的其他内容(例如 10k )。
答案 3 :(得分:4)
GNU / Linux解决方案(因为有超越Windows的生命):
遵循@aqm
的解决方案首先使用端口9000查找进程。
netstat -tulpn | grep :9000
您将获得如下输出:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 3993/programname
使用此命令需要PID来终止进程:
kill -9 3993
注意 :也许你的进程没有显示他的PID,你可能正在运行使用默认端口9000的PHP-FPM,在这种情况下你可以更改PHP-FPM端口或PHP Xdebug端口。
解决方案1 - 更改Xdebug配置:
修改/etc/php/php.ini
搜索xdebug.remote_port=9000
并替换为您的新端口
解决方案2 - 更改PHP-FPM端口:
修改/etc/php/php-fpm.conf
使用listen = 127.0.0.1:9000
搜索行,并用新端口替换9000
然后重新加载服务:
systemctl reload php-fpm
然后编辑您的nginx或apache配置以告知此新端口,在127.0.0.1:9000
或/etc/httpd/httpd.conf
中搜索/etc/nginx/nginx.conf
并将其替换为您的新端口
重新加载您的服务器:
systemctl reload nginx
或
systemctl reload httpd
我希望它有所帮助:),
合十。
答案 4 :(得分:3)
注意未来的自我:
在我的情况下,这是由于使用虚拟机端口转发(Virtual Box上的vagrant)引起的。我认为转发9000
是一个好主意。
解决方案:连接到VM IP 10.166.53.1
,这是标准的虚拟盒
我的/etc/php5/cgi/conf.d/xdebug.ini
; xdebug configuration
; xdebug.remote_host = localhost
zend_extension = /usr/lib/php5/20121212/xdebug.so
xdebug.remote_connect_back = 1
xdebug.remote_enable = 1
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.idekey = "PHPSTORM"
xdebug.remote_log = /var/log/xdebug.log
答案 5 :(得分:2)
首先,即使有点偏离主题,我认为这有帮助。我为每个docker-composer项目使用不同的网络接口。这样我就可以在/ etc / hosts中映射持久域名而不用担心,在这个例子中是192.168.33.102 project.domain.local
。
以下是yaml设置的示例:
nginx:
build: docker-images/nginx
links:
- "php"
ports:
- "192.168.33.102:80:80"
php:
build: docker-images/php/7.0.1-fpm
ports:
- "192.168.33.102:10000:9000"
php容器侦听{em> 9001 代表php7.0-fpm
, 9000 代表xdebug
,并且不会公开任何端口。
PhpStorm Debug Port设置为默认值9000,服务器主机设置为192.168.33.102
(或/ etc / hosts中的值,project.domain.local
)。
从php容器的端口可以看出,不同的映射端口设置为10000,它可以是除了9000以外的任何其他值,以从PhpStorm中删除繁忙的错误。
此外,在docker-compose上绑定端口很重要。如果没有映射端口它就无法工作,但它不适用于 9000:9000 。
希望它可以帮助别人!
PS:这是xdebug.ini:
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/xdebug.so
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true