phpstudy80端口被占用怎么解决

打开phpstudy,端口点启动,被占Apache亮了一下又灭了。用解你盯着那个红色的端口按钮,心里大概已经骂了三遍。被占这事儿我遇到过不下十次,用解最常见的端口原因就一个:80端口被别的程序占了。Windows上尤其容易,被占因为微软自家的用解IIS或者SQL Server报告服务经常偷偷摸摸把80给占了。

先别急着重启电脑。端口打开cmd,被占敲一行命令:

netstat -ano | findstr :80

你会看到类似这样的用解输出:

TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 4

最后那个数字就是占用80端口的进程PID。上面这个例子里是端口4,4是被占Windows的系统进程,通常是用解IIS或者HTTP.sys在作怪。记住这个PID,下一步要用。

接着敲:

tasklist | findstr 4

把4换成你实际看到的PID。如果显示的是System或者svchost.exe,那基本就是IIS或者SQL Server Reporting Services。我见过最多的情况是装了SQL Server之后,Reporting Services自动启动,把80端口吃掉了。很多人根本不知道这东西在跑。

知道是谁占的之后,解决办法分两种。一种是把占用端口的程序关掉或者改端口,另一种是让phpstudy换个端口用。我一般推荐先试试第一种,因为80端口用起来最省事,浏览器里直接输localhost就行,不用加端口号。

如果是IIS占的,去“服务和应用程序”里把IIS停掉,或者干脆卸载。如果是SQL Server Reporting Services,打开SQL Server配置管理器,找到Reporting Services,把它的端口从80改成8080之类的。改完重启服务,80就空出来了。

但有时候你找不到那个进程,或者它死活关不掉。比如某些国产软件、迅雷、甚至Skype都会抢80。Skype有个臭名昭著的设置,默认用80和443做备用端口。这种情况下,直接让phpstudy换端口更快。

打开phpstudy,找到Apache的配置文件httpd.conf,一般在phpstudy安装目录下的Apache\conf文件夹里。用记事本打开,搜索“Listen 80”,改成“Listen 8080”。再搜索“ServerName localhost:80”,改成“ServerName localhost:8080”。保存,重启phpstudy。

以后访问就用localhost:8080。多敲四个字符的事,比跟那些流氓进程斗智斗勇省心多了。

还有个小坑:改了端口之后,如果你在phpstudy里绑定了域名或者用了虚拟主机,记得把对应的配置也改掉。我见过有人只改了httpd.conf,结果虚拟主机还是指向80,怎么都访问不了。虚拟主机的配置文件通常在vhosts.conf里,里面的<VirtualHost *:80>也要改成8080。

另外,如果你用的是phpstudy新版本(2016之后的版本),它自带一个“端口检测”功能。在面板上点“其他选项菜单” -> “端口检测”,它会直接告诉你80被谁占了。省得你去cmd里敲命令。这个功能挺实用,但很多人不知道。

最后说一个我自己的习惯:装完phpstudy第一件事,就是把Apache端口改成8080。不是因为我怕冲突,而是因为Windows上80端口太抢手了,今天你关了IIS,明天装个新软件它又给你占上。与其每次折腾,不如一开始就避开。8080用久了也就习惯了,反正本地开发而已,浏览器书签里存一下的事。

如果你非要用80不可,那就装个火绒或者Process Explorer,看到底是哪个进程在监听。Process Explorer比任务管理器详细得多,能直接看到进程路径和公司名。有一次我就是靠它发现是某个国产输入法的更新服务在占80,关掉之后世界清净了。

总之,80端口被占不是phpstudy的错,是Windows生态太乱。查PID、杀进程、改端口,三步走完,问题基本都能解决。