为什么PHP -l
切换不会在test.html
中找到错误。
$ cat test.html
<?php
error_reporting(E_ALL);
echo "Hello, world!";
sdfsdfsdfsdf
?>
$ php -dhtml_errors=0 -ddisplay_errors=On -l test.html
No syntax errors detected in test.html
$ php test.html
Hello, world!PHP Notice: Use of undefined constant sdfsdfsdfsdf - assumed 'sdfsdfsdfsdf' in test.html on line 7
$
也找不到其他类型的错误,例如未定义的函数,require_once()
到不存在的文件,数组声明中的语法不正确等等。为什么会这样?
感谢。
答案 0 :(得分:3)
-l
仅限语法检查(lint)
-l
执行静态语法检查。代码永远不会被实际执行。在您的代码中没有语法错误。
文件末尾的乱码被认为是常量(因为它是常量的有效名称),未定义的常量计算为其字符串表示(并导致E_NOTICE)。由于它是文件中的最后一个语句,因此缺少的分号也不会导致语法错误。
由于PHP是一种动态语言,因此在不执行代码的情况下无法检测到未定义的常量 - define()
毕竟只是一个正常的函数。
答案 1 :(得分:2)
这些不是语法错误,这些是运行时错误。 -l只显示文件。