【问题标题】:How to understand PHP syntax errors? [duplicate]如何理解 PHP 语法错误? [复制]
【发布时间】:2012-08-18 15:19:46
【问题描述】:

我对使用 PHP 很陌生,但这已经让我难过一段时间了。这是我的test.php

<?PHP

$db = 'str1';
$sql = 'str2';
$cat = $sql . $db
echo $cat
?>

首先,当我运行 php test.php 时,我没有得到任何输出。我现在知道我在这里缺少一个分号或 2。如果 php 告诉我语法错误在哪一行,那就太好了。我能得到的最好的方法是运行 php -l ,这表明根本存在语法错误。但似乎我可以获得更多信息?知道怎么做吗?

【问题讨论】:

  • 如果您在屏幕上显示错误报告进行开发,它会告诉您遇到错误的行号。在这种情况下,错误将在 缺少的; 之后的行上报告。 ini_set('display_errors', 1); error_reporting(E_ALL); 将代码投入生产时,请务必关闭 display_errors。

标签: php command-line syntax interpreter


【解决方案1】:

您在最后 2 行中缺少 ;,这就是您遇到错误的原因。要查看此错误,请确保 error_reporting 在您的 PHP 配置中处于打开状态

例子

<?PHP
    error_reporting(E_ALL);
    $db = 'str1';
    $sql = 'str2';
    $cat = $sql . $db ;
    echo $cat ;
?>

【讨论】:

  • OP 已经知道 ; 丢失了。
  • 在 php.ini 中设置为:error_reporting = E_ALL & ~E_DEPRECATED。看起来是正确的,不是吗?
  • @glutz 为什么要排除折旧错误???
  • 我不知道。这只是默认设置。无论哪种方式,我都不会报告错误。 error_reporting() 调用是否覆盖 php.ini 中设置的内容?
  • 显然,php.ini 中的 display_errors 已关闭。很奇怪。
【解决方案2】:

PHP 无法告诉你具体的事情,但它可以告诉你在哪一行出了问题。

如果您没有看到此类错误,则可能是您的 error_reporting 隐藏了这些错误。

在你的 PHP ini 中你可以设置:

  • display_errors1
  • html_errors1
  • error_reportingE_ALL

当它无法正确解析一行时,它会告诉你,但它不会具体告诉你该行有什么问题,例如:

OMFG it's missing a semicolon

话虽如此,它可以告诉您其他具体的事情,例如:

  • 当文件不存在时
  • 未定义变量时
  • 当类不存在时

还有其他事情,但不,上次我检查语法错误时报告的就是这样。

【讨论】:

    猜你喜欢
    • 2021-03-23
    • 2015-02-07
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多