运行script.php时出错:端口9000正忙

时间:2013-10-01 06:15:09

标签: php linux port xdebug phpstorm

我在php.ini中设置Debug 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是如何工作的。它就像在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的东西。

6 个答案:

答案 0 :(得分:11)

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

检查Jacob提到的当前使用的端口(在Windows cmd:netstat -a -b上): enter image description here

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

答案 1 :(得分:5)

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

Windows修复 - >

  1. 使用9000
  2. 查找过程

    打开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
    
    1. KILL PROCESS
    2. taskkill / PID XXXX

      1. PROFIT ......?,您现在应该可以运行调试器了

答案 2 :(得分:4)

无法识别lsof和netstat在 9000 端口上运行的进程的pid。临时最简单的解决方案只是更改phpstormphp.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,这是标准的虚拟盒 enter image description here

我的/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