PHP 内置 Web 服务器和路由器脚本中的语法错误

PHP Built-in web server and syntax error in a router script

提问人:fracz 提问时间:12/11/2020 更新时间:12/11/2020 访问量:374

问:

我正在使用 PHP 内置 Web 服务器进行测试。例如,使用简单的路由器脚本:

<?php
echo 'Hello world';

使用 .工程。php -S localhost:8000 router.php

现在,我们不要说我在路由器脚本中犯了语法错误(例如缺少分号):

<?php
echo 'Hello world'

并使用相同的命令启动开发服务器。

在浏览器中访问给我 404 错误:在此服务器上找不到请求的资源/。它完全没有给我任何关于问题或语法错误放置的线索。我打开Web服务器的终端也没有显示任何错误(除了404)。localhost:8000

我将错误报告设置为 。我已将 .E_ALLphp.inidisplay_errorsOn

在这种情况下,在哪里查找错误消息?如何强制PHP将此类错误呈现给浏览器而不是404错误页面?

错误报告 php-builtin-server

评论

0赞 El_Vanja 12/11/2020
从技术上讲,这不是语法错误。除非该行之后的脚本中有更多的代码。
1赞 CBroe 12/11/2020
您确定在正确的php.ini中进行了设置吗?
0赞 fracz 12/11/2020
是的。甚至显示路由器内部脚本并确认 和 已设置。phpinfo()E_ALLdisplay_errors

答:

2赞 Susilo 12/11/2020 #1

经过反复试验,我得出的结论是,不会在任何文件中记录错误,而是直接打印到控制台并发送到浏览器,前提是 php 文件不包含任何词法错误。我找不到任何关于此的文档,所以请随时纠正我。php-builtin-server

可以做一个简单的解决方法,在运行之前检查php文件。为了简化操作,请为其创建一个批处理文件。php -lphp-builtin-server

窗户

使用以下内容创建(或任何有效名称):php-srv.bat

php -l %1 | find /i "No syntax errors"
if not errorlevel 1 (
   php -S localhost:8000 %1
)

执行它php-srv route.php

Linux的

使用以下内容创建(或任何有效名称):php-srv.sh

if php -l $1 | grep 'No syntax errors detected in'; then
    php -S localhost:8000 $1
fi

使其可执行,然后使用chmod./php-srv.sh route.php

希望对您有所帮助