在本地主机之外运行 PHP 5.4 内置的 Web 服务器

29

是的,在即将发布的PHP 5.4版本中有内置的Web服务器,您可以在它们的发行候选版中尝试(我也是最近才知道的!)

http://php.net/manual/zh/features.commandline.webserver.php

我需要帮助弄清楚的是,是否有任何方法使其运行在除localhost之外的域名上(它在localhost的80端口上运行良好)?即使是127.0.0.1也不起作用。我已经在我的hosts文件中放入虚拟主机名以指向127.0.0.1,但它们也不起作用。我知道这只是一个发布候选版,但我想知道是否有其他人已经为此问题提出了解决方案,以便我可以使用实际的域名在我的hosts文件中指向127.0.0.1来测试我的应用程序。操作系统是Windows 7 Professional SP1。

我已经尝试过以下方法: 1. 谷歌搜索(呃) 2. 查看php.ini选项 3. 尝试使用127.0.0.1、我的LAN IP、我的WAN IP,并将端口80转发和NAT环回问题修复(路由器运行DD-WRT)


如果涉及到Web服务器,那么您最好去SuperUser或ServerFault,因为本网站更适合于使用PHP进行实际编程 - animuson
我不确定它是否属于此类,因为这是 PHP 内置的东西,可能与 PHP 自身的配置有关。无论如何,感谢您的建议! - Shanshui
我仔细想了想,认为你是对的。我刚刚标记了自己的问题,希望将其移动到ServerFault。希望很快会有一位管理员过来。 - Shanshui
5
这不适合在 SF 上,因为它不是真正的 Web 服务器,只是一个开发工具。你为什么想在除了本地主机以外的其他域名上运行它?另外,你具体尝试了什么?使用 php -S www.example.localnet:9000 是完全可以的,即使实际的请求头是 Host: 也会被忽略。你尝试的是哪个版本?(Beta 版本可能不适合用于报告问题。) - mario
Mario,我想你刚刚解决了我的问题。我为PHP可执行文件创建了一个快捷方式,但忘记了一直在运行php -S localhost:80。你能将你的评论写成答案吗?这样我就可以将其标记为正确答案了。(另外,它是PHP 5.4 RC2) - Shanshui
8
管理员需要冷静对待关闭问题……这是一个完全合理的问题。 - Alex Gray
1个回答

75

这些测试是在 Windows XP 系统上进行的,但是通过修改命令,也应该可以在 Linux 上运行。

像这样运行您的 PHP 测试服务器:

C:/php/php.exe -S 0.0.0.0:80
or
/usr/bin/php -S 0.0.0.0:80

0.0.0.0会绑定到系统上的所有可用IP地址。

在网络中的另一台机器上,我使用自定义域配置了主机文件,将其指向运行PHP的系统的内部IP。这不是127.0.0.1,因为那是指本地主机。在我的情况下,我将主PC指向了运行PHP的XP机的192.168.88.247。请注意,防火墙应该被禁用或设置为允许运行php的机器上80端口的流量。

我配置了路由器以将来自外部端口80的流量转发到192.168.88.247:80。然后,使用外部网络上PC上的主机文件,我配置虚拟域名指向我的WAN IP。我能够从外部访问PHP Web服务器。

也就是说,这只是一个用于测试的服务器,因此可能存在未知的安全风险,开放给外部世界。


1
感谢0.0.0.0的提示!太棒了...;-) - ZEE
如何使其仅接受预先指定主机的连接? - Ahmad Hajjar
1
@AhmadHajjar 如果您想让PHP Web服务器仅接受来自某些主机的连接,则需要在本地计算机上配置防火墙(或者如果使用NAT进行外部服务,则需要在路由器上配置),因为内置服务器没有任何类型的访问控制。虽然不太安全,但我认为您可以配置路由器脚本以查看远程地址并将其与允许的主机列表进行比较,如果超出列表,则终止请求。 - drew010
喜欢它,这样就可以在 Docker 中使用它。 - FantomX1
在JavaFX中遇到了类似的问题。尽管在URL中使用了http://localhost,但它仍会显示“连接被拒绝”。我不确定为什么当JavaFX在localhost时连接会被拒绝,但是使用0.0.0.0解决了这个问题,谢谢! - tresf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接