【问题标题】:PHP Built-in web server and syntax error in a router scriptPHP 内置 Web 服务器和路由器脚本中的语法错误
【发布时间】:2021-03-22 18:34:11
【问题描述】:

我使用PHP Built-in web server 进行测试。例如,使用一个简单的路由器脚本:

<?php
echo 'Hello world';

使用php -S localhost:8000 router.php 启动它。有效。

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

<?php
echo 'Hello world'

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

在浏览器中访问 localhost:8000 时出现 404 错误:在此服务器上找不到请求的资源 /。。它让我完全不知道问题或语法错误的位置。我在其中启动 Web 服务器的终端也没有显示任何错误(404 除外)。

我在php.ini 中将错误报告设置为E_ALL。我将display_errors 设置为On

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

【问题讨论】:

  • 从技术上讲,这不是语法错误。除非该行之后的脚本中有更多代码。
  • 您确定您在正确 php.ini 中进行了设置吗?
  • 是的。甚至在路由器脚本中显示了phpinfo(),并确认设置了E_ALLdisplay_errors

标签: php error-reporting php-builtin-server


【解决方案1】:

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

可以做一个简单的解决方法,在运行php-builtin-server 之前用php -l 词法检查php 文件。为方便起见,请为其创建一个批处理文件。

窗口

使用内容创建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 执行它

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-19
    相关资源
    最近更新 更多