猿问

参考 - 这个错误在PHP中意味着什么?

这是什么?

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

为什么是这样?

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

我该怎么办?

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

如果您想贡献,请添加您的“收藏”错误消息,警告或通知,每个答案一个,简短说明它意味着什么(即使它只是突出显示其手册页的术语),可能的解决方案或调试方法和现有问答的清单。此外,随时改善任何现有的答案。

列表

另外,请参阅


神不在的星期二
浏览 742回答 6
6回答

jeck猫

当您的脚本尝试向客户端发送HTTP标头但之前已经有输出时,会发生这种情况,这导致标头已经发送到客户端。这是一个E_WARNING,它不会停止脚本。一个典型的例子是这样的模板文件:<html> &nbsp;&nbsp;&nbsp;&nbsp;<?php&nbsp;session_start();&nbsp;?> &nbsp;&nbsp;&nbsp;&nbsp;<head><title>My&nbsp;Page</title></html>...该session_start()函数将尝试将带有会话cookie的标头发送到客户端。但PHP在将<html>元素写入输出流时已经发送了头文件。你必须移到session_start()顶部。您可以通过在代码触发警告之前浏览行来解决这个问题,并检查它输出的位置。在该代码之前移动任何标题发送代码。经常被忽视的输出是PHP关闭后的新行?>。?>当它是文件中的最后一件事时,省略它被认为是标准做法。同样,此警告的另一个常见原因是当开头<?php在其前面有空的空格,行或不可见字符时,导致Web服务器发送标题和空格/换行因此当PHP开始解析时将无法提交任何标题。如果您的文件中包含多个<?php ... ?>代码块,则它们之间不应有任何空格。(注意:如果你有自动构造的代码,你可能有多个块)还要确保代码中没有任何字节顺序标记,例如,当脚本的编码为带有BOM的UTF-8时。相关问题:标头已经由PHP发送Stackoverflow上的所有PHP“标题已发送”问题字节顺序标记什么PHP函数创建输出?

SMILET

没有看到任何东西。该页面为空白色。也被称为白页死亡或白色死亡屏幕。当关闭错误报告并发生致命错误(通常是语法错误)时会发生这种情况。如果启用了错误日志记录,您将在错误日志中找到具体的错误消息。这通常位于名为“php_errors.log”的文件中,可以位于中心位置(例如,/var/log/apache2在许多Linux环境中),也可以位于脚本本身的目录中(有时在共享托管环境中使用)。有时,暂时启用错误显示可能更为直接。然后白页将显示错误消息。请小心,因为访问该网站的每个人都可以看到这些错误。这可以通过在脚本顶部添加以下PHP代码来轻松完成:ini_set('display_errors',&nbsp;1);&nbsp;error_reporting(~0);代码将打开错误显示并将报告设置为最高级别。由于ini_set()在运行时执行它对解析/语法错误没有影响。这些错误将出现在日志中。如果要在输出中显示它们(例如在浏览器中),则必须将display_startup_errors指令设置为true。在运行之前php.ini或之中.htaccess或通过影响配置的任何其他方法执行此操作。您可以使用相同的方法设置log_errors和error_log指令以选择您自己的日志文件位置。查看日志或使用显示,您将获得更好的错误消息和脚本停止的代码行。相关问题:PHP的死亡白屏白屏死机!PHP不显示错误消息PHP错误排放500 - 这在哪里记录?如何在PHP中获取有用的错误消息?Stackoverflow上的所有PHP“White Page of Death”问题相关错误:解析错误:语法错误,意外T_XXX致命错误:在非对象上调用成员函数....代码无法运行/看起来像我的PHP代码的部分输出

潇湘沐

$this是PHP中的一个特殊变量,无法分配。如果在不存在的上下文中访问它,则会发出此致命错误。可能会发生此错误:如果静态调用非静态方法。例:class&nbsp;Foo&nbsp;{ &nbsp;&nbsp;&nbsp;protected&nbsp;$var; &nbsp;&nbsp;&nbsp;public&nbsp;function&nbsp;__construct($var)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$this->var&nbsp;=&nbsp;$var; &nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;function&nbsp;bar&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;^^^^^^ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$this->var; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;&nbsp;&nbsp;^^^^^ &nbsp;&nbsp;&nbsp;}}Foo::bar();如何修复:再次检查代码,$this只能在对象上下文中使用,绝不能在静态方法中使用。此外,静态方法不应访问非静态属性。使用self::$static_property访问静态属性。如果将类方法中的代码复制到普通函数或仅复制到全局范围并保留$this特殊变量。如何修复:查看代码并替换$this为不同的替换变量。相关问题:将非静态方法称为静态:PHP致命错误:在不在对象上下文中时使用$ this复制代码:致命错误:在不在对象上下文中时使用$ this所有“在不在对象上下文中时使用$ this”对Stackoverflow的问题
随时随地看视频慕课网APP
我要回答