PHP解析/语法错误;以及如何解决这些错误?
每个人都会遇到语法错误。即使是有经验的程序员也会出现错别字。对于新人来说,这只是学习过程的一部分。然而,通常很容易解释这样的错误信息。
PHP解析错误:语法错误,意外的'{' in index.php on line 20 意外的符号并不总是真正的罪魁祸首。但从行号可以大致知道从哪里开始查找。 始终查看代码上下文。语法错误往往隐藏在提到的或前几行代码中。将你的代码与手册中的语法例子进行比较。 虽然不是每一种情况都能匹配。然而,有一些解决语法错误的**的一般步骤。 这个参考文献总结了常见的陷阱。
- Unexpected T_STRING
- Unexpected T_VARIABLE
Unexpected '$varname'(T_VARIABLE)- Unexpected T_CONSTANT_ENCAPSED_STRING
Unexpected T_ENCAPSED_AND_WHITESPACE- Unexpected $end
- Unexpected T_FUNCTION...
- Unexpected
{
Unexpected}
Unexpected(
Unexpected)
- Unexpected
[
Unexpected]
- [Unexpected T_IF
Unexpected T_FOREACH
Unexpected T_FOR
Unexpected T_WHILE
Unexpected T_DO
Unexpected T_PRINT
Unexpected T_ECHO] (https://stackoverflow.com/a/18092318)- Unexpected T_LNUMBER
- [Unexpected ? ] (//stackoverflow.com/a/48670368)
- Unexpected continue (T_CONTINUE)
Unexpected continue (T_BREAK)
Unexpected continue (T_RETURN)- Unexpected '='
- Unexpected T_INLINE_HTML...
- Unexpected T_PAAMAYIM_NEKUDOTAYIM...
- Unexpected T_OBJECT_OPERATOR...
- Unexpected T_DOUBLE_ARROW...
- Unexpected T_SL...
- Unexpected T_BOOLEAN_OR...
Unexpected T_BOOLEAN_AND...- Unexpected T_IS_EQUAL
未预期的T_IS_GREATER_OR_EQUAL
意外的T_IS_IDENTICAL
意外的T_IS_NOT_EQUAL
意外的T_IS_NOT_IDENTICAL
意外的T_IS_SMALLER_OR_EQUAL
未料到的<
未预期的>
- Unexpected T_NS_SEPARATOR ...
- Unexpected character in input: '
\
' (ASCII=92) state=1- [Unexpected 'public' (T_PUBLIC)
Unexpected 'private' (T_PRIVATE)
Unexpected 'protected' (T_PROTECTED)
Unexpected ' final' (T_FINAL) ] (https://stackoverflow.com/questions/13341378/php-parse-error-syntax-error-unexpected-t-public) ...- Unexpected T_STATIC...
- Unpexected
.
(句号)- Unexpected
;
(分号).- Unexpected
*
(星号).- 意外的
:
(冒号) 密切相关的参考资料。- 这个错误在PHP中是什么意思?(运行时错误)
- 解析错误:语法错误,意外的T_XXX
- 解析错误:语法错误,意外的T_ENCAPSED_AND_WHITESPACE
- 解析错误:语法错误,意外的T_VARIABLE
- 这个符号在PHP中是什么意思?(语言标记)
- 那些
""
聪明的`''引号对PHP毫无意义 还有。
- php.net上的PHP手册和它的各种语言标记
- 或者维基百科的关于PHP的语法介绍。
- 最后是我们的php标签-维基,当然。 虽然Stack Overflow也欢迎菜鸟程序员,但它主要是针对专业的编程问题。 *回答每个人的编码错误和狭义的错别字被认为是偏离主题的。
- 所以请花时间按照基本步骤,在发布语法修复请求之前。
如果你仍然需要,请展示你自己的解决举措,尝试修复,以及你对看起来或可能是错误的思考过程。 如果你的*浏览器显示错误信息,如"SyntaxError: illegal character",那么它实际上与[tag:php]无关,而是一个[tag:javascript]-语法错误。
在供应商代码中出现的语法错误:最后,考虑到如果语法错误不是通过编辑你的代码库而出现的,而是在外部供应商的软件包安装或升级后出现的,这可能是由于PHP版本不兼容,所以要根据你的平台设置检查供应商的要求。
613
3
语法错误有哪些?
PHP 属于 C-style 和 imperative 编程语言。它有严格的语法规则,当遇到错位的符号或标识符时,它无法恢复。它不能猜测你的编码意图。
最重要的提示
有一些基本的预防措施,你可以经常采取。
使用适当的**代码缩进,或采用任何崇高的编码风格。 可读性防止不规范。
使用一个IDE或PHP的编辑器,带有语法高亮。 这也有助于圆括号/括号的平衡。 。
阅读语言参考和手册中的例子。 两次,以达到一定的熟练程度。
如何解释解析器错误
一个典型的语法错误信息是这样的
打开提到的源文件。看一下提到的代码行。
更经常的是,你还需要看一下的前几行。
;
分号在前面的行尾/语句中缺失。(至少从文体的角度看是这样。){
代码块}
被不正确地封闭或嵌套,你可能需要在源代码上更进一步调查。使用适当的代码缩进来简化这个问题。看一下语法着色!
+-*/.
也应该被染成不同的颜色。否则,它们可能会出现在错误的上下文中。"
或'
字符串标记。白色空间是你的朋友。 遵循**的编码风格。
暂时拆分长行。
将长的代码块分割开来,**真正有助于找到语法错误的根源。
注释出违规的代码。
作为一个新手,要避免一些混乱的语法结构。
? :
条件操作符可以压缩代码,确实很有用。但它并不是在所有情况下都有助于可读性。在不熟悉的情况下,更倾向于使用普通的if
语句。if:
/elseif:
/endif;
)在模板中很常见,但可以说不如正常的{
代码``块容易掌握。新人最普遍的错误是。
;
。"
或'
的字符串引号不匹配,以及内部未转录的引号。.
的连接。(
括号)
。在报告行中计算它们。它们的数量是否相等?不要忘记,解决了一个语法问题,就会发现下一个问题。
如果你不能修复它,请恢复以前工作的代码的备份。
不可见的杂散Unicode字符。在某些情况下,你需要使用hexeditor或不同的编辑器/查看器来查看你的源代码。有些问题不能仅仅通过查看你的代码来发现。
grep -color -P -n "\[\x80-\xFF\]" file.php
作为查找非ASCII符号的第一项措施。注意文件中保存的类型的换行符。
//
或#
注释时才会出现这个问题。多行/*...*/
注释很少会干扰解析器,因为断行被忽略了。如果你的语法错误没有通过网络传输。 你的机器上有一个语法错误,这是正常的。但在网上发布相同的文件时,就不会再出现这种情况。这只能说明两件事中的一件。
检查你的PHP版本。不是所有的语法结构在每个服务器上都可用。
php -v
用于命令行解释器<?php phpinfo();
用于通过webserver调用的那个。这些并不一定相同。特别是在与框架一起工作时,你将它们匹配起来。
不要使用PHP的保留关键字作为函数/方法、类或常量的标识。
试错法是你最后的手段。 如果所有的方法都失败了,你可以随时谷歌你的错误信息。语法符号不是那么容易搜索的(Stack Overflow本身是由SymbolHound索引的)。因此,你可能需要多看几页才能找到相关的东西。 更多的指南。
PHP 调试基础知识 作者:David Sklar
修复PHP错误 作者:Jason McCreary
PHP错误 - 10个常见错误 作者:Mario Lurig
常见的PHP错误和解决方案。
如何排除和修复您的WordPress网站的故障。
设计人员的PHP错误信息指南 - Smashing Magazine
白屏死机
如果你的网站只是空白,那么通常是语法错误造成的。 用以下方法启用它们的显示。
error_reporting = E_ALL
.display_errors = 1
。 一般在你的php.ini
,或者通过.htaccess
为mod_php。 甚至是.user.ini`的FastCGI设置。 在破损的脚本中启用它为时已晚,因为 PHP 甚至不能解释/运行第一行。一个快速的解决方法是制作一个封装脚本,例如test.php
。然后通过访问这个包装脚本来调用失败的代码。 启用PHP的
error_log'也有帮助,当一个脚本崩溃并出现HTTP 500响应时,可以查看你的[webserver的
error.log']21。##不料T_VARIABLE
一个 "意外的
T_VARIABLE'"意味着有一个字面的
$variable'名称,它不适合当前的表达式/语句结构。。
1.
缺少分号
。2.
字符串连接法</h3
一个经常发生的错误是字符串连接被遗忘的
.
操作符。Btw,你应该更喜欢字符串插值(双引号中的基本变量),只要这有助于可读性。这就避免了这些语法问题。
3.
缺少表达式操作符
。4.
列表</h3
5.
类的声明</h3
6.h3标识符后的变量 /h3
7.
在语言结构后漏掉了小括号
。if
和for
以及foreach
语句。Else不期望条件
。解决方案。删除
else
中的条件或使用elseif
。关闭时需要括号
。解决方案。在"$var "周围添加括号。
10.
不可见的空白
。也见
不合预期的T_STRING
`T_STRING'是一个有点错误的名称.它并不是指一个带引号的 "字符串"。它意味着遇到了一个原始标识符。它的范围可以从 "空白 "字词到剩余的 "CONSTANT "或函数名,被遗忘的未加引号的字符串,或任何纯文本。 1.
错误引用的字符串
。 这种语法错误最常见于错误引用的字符串值,但是。任何未转义和游离的""或"'"引号将形成一个无效的表达。 ⇓ ⇓ echo "点击这里"。 语法高亮会使这种错误变得超级明显。重要的是要记住使用反斜线来转义双引号,或者
单引号--这取决于哪种被用作[字符串包围][1]。"
双引号。未闭合的字符串