参考 \- 这个错误在 PHP 中是什么意思?

新手上路,请多包涵

这是什么?

这是一些关于您在编写 PHP 时可能遇到的警告、错误和通知的答案,但不知道如何修复它们。这也是一个社区 Wiki,因此邀请每个人参与添加和维护此列表。

为什么是这样?

Stack Overflow 上经常会出现诸如 “已发送标头”“调用非对象成员”之 类的问题。这些问题的根本原因总是相同的。因此,这些问题的答案通常会重复它们,然后向 OP 显示在其特定情况下要更改哪一行。这些答案不会为站点增加任何价值,因为它们仅适用于 OP 的特定代码。其他具有相同错误的用户无法轻松地从中读取解决方案,因为他们过于本地化。这很可悲,因为一旦您了解了根本原因,修复错误就变得微不足道了。因此,此列表试图以通用的方式解释解决方案。

我应该在这里做什么?

如果您的问题已被标记为与此问题重复,请在下面找到您的错误消息并将修复程序应用于您的代码。答案通常包含进一步调查的链接,以防仅从一般答案中不清楚。

如果您想做出贡献,请添加您“最喜欢的”错误消息、警告或通知、每个答案一个、简短的描述它的含义(即使它只是在其手册页中突出显示术语)、可能的解决方案或调试方法以及有价值的现有问答列表。此外,请随时改进任何现有答案。

名单

警告:mysql_fetch_array():提供的参数不是有效的 MySQL 结果资源 - 警告: [function] 期望参数 1 是资源,给定的布尔值 - 警告: [功能] :无法打开流: [原因] - 警告:open_basedir 限制生效 - 警告:除以零 - 警告:非法字符串偏移 ‘XXX’ - 警告:count():参数必须是数组或实现 Countable 的对象 - 解析错误:语法错误,意外的 ‘[’ - 解析错误:语法错误,意外的 T_XXX - 解析错误:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE - 解析错误:语法错误,意外的 T_PAAMAYIM_NEKUDOTAYIM - 解析错误:语法错误,意外的“require_once”(T_REQUIRE_ONCE),期望函数(T_FUNCTION) - 解析错误:语法错误,意外的 T_VARIABLE - 致命错误:已用尽允许的 XXX 字节内存大小(尝试分配 XXX 字节) - 致命错误:超过 XX 秒的最大执行时间 - 致命错误:在非对象或 null 上调用成员函数 … - 致命错误:调用未定义函数 XXX - 致命错误:无法重新声明 XXX - 致命错误:无法在写入上下文中使用函数返回值 - 致命错误:AAA::BBB() 的声明必须与 CCC::BBB() 的声明兼容’ - AAA::BBB() 的返回类型应该与 CCC::BBB() 兼容,或者应该使用 #[\ReturnTypeWillChange] 属性 - 致命错误:不在对象上下文中使用 $this - 致命错误:类 Closure 的对象无法转换为字符串 - 致命错误:未定义的类常量 - 致命错误:未捕获的类型错误:参数 #n 必须是 x 类型,给定 y - 注意:数组到字符串的转换 - 注意:试图获取非对象错误的属性 - 注意:未定义的变量或属性 - “注意:未定义的索引”或“警告:未定义的数组键” - 注意:未定义的偏移量 XXX [参考] - 注意:未初始化的字符串偏移量:XXX - 注意:使用未定义的常量 XXX - 假定为“XXX”/错误:未定义的常量 XXX - MySQL:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以便在…附近使用…行… - 严格标准:非静态方法 [::] 不应被静态调用 - 警告:函数期望参数 X 为布尔值/字符串/整数 - HTTP 错误 500 - 内部服务器错误 - 不推荐使用:不推荐使用带有花括号的数组和字符串偏移访问语法

另见:

原文由 hakre 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 313
1 个回答

致命错误:超过 XX 秒的最大执行时间

每个 PHP 页面请求或脚本调用都会测量 PHP 代码 执行了多长时间。如果达到配置的限制,脚本将中止并显示此消息。

请注意,时间通常 包括发生在“PHP 之外”的事情,例如等待数据库结果的时间,或使用 shell_exec 执行的外部程序等。例外是 PHP 运行时在 Windows 上,测量的时间是“时钟时间”并且 确实 包括这些外部等待时间。

常见原因

  • 无限循环。 写错的 whiledo...whilefor 循环可能永远不会完成,这意味着 PHP 将永远持续运行。即使是 foreach 循环也可以是无限的,例如,如果循环遍历一个 迭代器对象生成器函数
  • 大型数据集。 即使您的循环不是无限的,如果它正在做大量工作,如果它正在处理大量结果,它可能需要太长时间才能完成。

更改限制

如果你知道你有一个缓慢的过程,你可以配置时间限制:

  • 在 php.ini 中,使用 max_execution_time 设置
  • 在脚本运行时,使用 set_time_limit 函数。请注意,调用此函数会将测量的时间重置为零,因此 set_time_limit(10); 表示“允许 10 秒,无论脚本已经花费了多长时间”。

两种机制都应该被赋予一定的秒数,或者特殊值 0 表示“无限制”。设置“无限制”对于您真正打算在后台永久运行的命令行脚本最有用;对于网页,最好设置一些有限的值,即使它非常大,以防止代码中的错误导致整个系统无响应。

原文由 IMSoP 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题