15

我设置php.iniDebug configphpstorm. 尝试在 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工作原理。就像Debug("script.php")(Shift+F9)在文件中设置断点在 phpstorm 中运行一样?

有人有想法吗?

编辑:

来自: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 的东西。

4

7 回答 7

15

在端口 9000 上运行的进程可能是 PhpStorm 本身。

检查当前使用的端口,如 Jacob 提到的(在 Windows cmd: 上netstat -a -b): 在此处输入图像描述

如果PhpStorm.exe列在:9000下,您只需在设置 > 构建、执行、部署 >调试器中将内置服务器的端口更改为例如63342(这是我的队友安装 PhpStorm 的默认设置)。

于 2016-03-01T13:37:38.320 回答
8

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:9000in/etc/httpd/httpd.conf/etc/nginx/nginx.conf将其替换为您的新端口

重新加载您的服务器:

systemctl reload nginx

或者

systemctl reload httpd

我希望它有帮助:),

合十礼。

于 2015-08-01T00:56:28.010 回答
5

无法用 lsof 和 netstat 识别在9000端口上运行的进程的 pid。phpstorm临时最简单的解决方案就是将端口更改php.ini为实际未使用的其他端口(例如10k)。

于 2013-10-01T11:12:04.843 回答
5

基本上其他一些进程正在使用 9000 而不是让它走,通常对我来说另一个 IDE 同时运行

窗户修复->

  1. 使用 9000 查找过程

打开 cmd.exe

网络统计 -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
  1. 杀死进程

taskkill /PID XXXX

  1. 利润...?,你现在应该可以运行调试器了
于 2014-04-18T08:29:05.527 回答
3

给未来的自己注意:

就我而言,这是由使用虚拟机端口转发(Virtual Box 上的 vagrant)引起的。我认为转发9000是个好主意。

解决方案:连接到10.166.53.1标准 Virtual Box 的 VM IP在此处输入图像描述

我的内容/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
于 2015-08-18T13:01:38.610 回答
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 容器在9001php7.0-fpm9000上侦听,xdebug并且不公开任何端口。

PhpStorm 调试端口设置为默认 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
于 2016-02-26T14:59:44.270 回答
0

对我来说工作:

在 linux 上查看使用的端口

sudo netstat -tulpn | grep :90 

结果

tcp        0      0 0.0.0.0:9000            0.0.0.0:*               OUÇA       22719/docker-proxy  
tcp6       0      0 :::9000                 :::*                    OUÇA       22726/docker-proxy  
tcp6       0      0 :::9003                 :::*                    OUÇA       5252/java

然后我改变了

在 dockerfile 上:

&& echo "xdebug.client_port=9001" >> /usr/local/etc/php/conf.d/xdebug.ini \

和 phpstorm 设置

设置 > PHP > 调试:

Xdebug 部分:调试端口 9001

于 2022-01-10T13:27:41.147 回答