我有一个学校项目,需要托管和运行 php 程序。我很难让它在 Apache 中按预期运行,但是,当我使用 php -S 运行它时,它运行得像冠军一样。我想将其托管在可通过外部 IP 访问的位置。我怀疑 php -S 只允许从本地计算机访问。
我想使用 php -s xxx.xxx.xxx.xxx:80。我想确认 php -S 不会这样做。我很高兴听到其他替代方案。
回答这个问题,是的,可以。 内置 Web 服务器需要提供主机 + 端口组合(没有默认值),并且它不会实施任何主动检查来拒绝非本地地址:
$ php -S 192.168.0.15:8080
[Fri Sep 8 10:37:37 2023] PHP 8.1.2-1ubuntu2.14 Development Server (http://192.168.0.15:8080) started
在某些操作系统(例如 Linux)上,您需要管理员权限才能打开受保护的端口(低于 1024 的端口):
$ php -S 192.168.0.15:80
[Fri Sep 8 10:38:38 2023] Failed to listen on 192.168.0.15:80 (reason: Permission denied)
$ sudo php -S 192.168.0.15:80
[Fri Sep 8 10:38:41 2023] PHP 8.1.2-1ubuntu2.14 Development Server (http://192.168.0.15:80) started
像往常一样,如果您需要来自本地网络外部的连接,则需要在路由器中定义适当的重定向,以便将特定协议/端口的传入连接重定向到您的计算机,并为最终用户提供您的公共连接IP 地址或指向它的域名。请注意,IPv4 很稀缺,因此一些托管提供商在多个客户之间共享地址(运营商级 NAT,又名 CGNAT),因此不允许外部访问您的路由器。
其他注意事项:
这是一个开发人员工具,根据其创建者的说法,不应在公共网络上使用。
默认情况下它不会处理并发请求。为此,您需要在启动服务器之前将
PHP_CLI_SERVER_WORKERS
环境变量设置为所需的工作人员数量。此功能是实验性的,在 Windows 上不可用。
您的计算机需要打开,并打开控制台运行命令。如果它崩溃或关闭,您需要在那里再次运行它。有一些方法可以自动执行此操作,但这肯定不是该工具设计的场景。
你应该这样做吗?在您的用例中,绝对不是。只需修复您的代码/设置即可在 Apache 中工作。解决配置问题是学习过程的一部分。你不能每次在第一次尝试都不起作用时就放弃一个工具。