为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

神不在的星期二 2019-05-20 15:09:32
这是什么?这是关于编程PHP时可能遇到的警告,错误和通知的一些答案,并且不知道如何修复。这也是社区Wiki,因此邀请每个人参与添加和维护此列表。为什么是这样?Stack Overflow上经常弹出诸如“已发送标头”或“调用非对象成员”之类的问题。这些问题的根本原因总是一样的。因此,这些问题的答案通常会重复,然后显示OP在他/她的特定情况下要改变哪一行。这些答案不会为网站添加任何价值,因为它们仅适用于OP的特定代码。具有相同错误的其他用户不能轻易地从中读取解决方案,因为它们过于本地化。这很难过,因为一旦你理解了根本原因,修复错误是微不足道的。因此,该列表试图以一般的方式解释解决方案。我该怎么办?如果您的问题已被标记为重复,请在下面找到您的错误消息并将修复程序应用于您的代码。答案通常包含进一步的调查链接,以防单独从一般答案中得出结论。如果您想贡献,请添加您的“收藏”错误消息,警告或通知,每个答案一个,简短说明它意味着什么(即使它只是突出显示其手册页的术语),可能的解决方案或调试方法和现有问答的清单。此外,随时改善任何现有的答案。列表没有看到任何东西。该页面为空白色。(也称为白页/死亡之屏)代码无法运行/看起来像我的PHP代码的部分输出警告:无法修改标头信息 - 已发送的标头警告:mysql_fetch_array()期望参数1是资源,布尔给定又名警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源又名警告:mysqli_num_rows()期望参数1为mysqli_result,给定布尔值(或类似变体)警告:[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个字节)致命错误:在非对象上调用成员函数...或null致命错误:调用未定义的功能XXX致命错误:无法重新声明XXX致命错误:在写上下文中不能使用函数返回值致命错误:AAA :: BBB()的声明必须与CCC :: BBB()的声明兼容致命错误:在不在对象上下文中时使用$ this注意:数组到字符串转换注意:尝试获取非对象错误的属性注意:未定义的变量注意:未定义的索引注意:未定义的偏移量XXX [参考]注意:未初始化的字符串偏移量:XXX注意:使用未定义的常量XXX - 假设为'XXX'MySQL:你的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在...附近使用正确的语法...严格标准:不应静态调用非静态方法[<class> :: <method>]警告:函数需要参数X为boolean / string / integerHTTP错误500 - 内部服务器错误另外,请参阅参考 - 这个符号在PHP中意味着什么?
查看完整描述

6 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

当您的脚本尝试向客户端发送HTTP标头但之前已经有输出时,会发生这种情况,这导致标头已经发送到客户端。

这是一个E_WARNING,它不会停止脚本。

一个典型的例子是这样的模板文件:

<html>
    <?php session_start(); ?>
    <head><title>My Page</title></html>...

session_start()函数将尝试将带有会话cookie的标头发送到客户端。但PHP在将<html>元素写入输出流时已经发送了头文件。你必须移到session_start()顶部。

您可以通过在代码触发警告之前浏览行来解决这个问题,并检查它输出的位置。在该代码之前移动任何标题发送代码。

经常被忽视的输出是PHP关闭后的新行?>?>当它是文件中的最后一件事时,省略它被认为是标准做法。同样,此警告的另一个常见原因是当开头<?php在其前面有空的空格,行或不可见字符时,导致Web服务器发送标题和空格/换行因此当PHP开始解析时将无法提交任何标题。

如果您的文件中包含多个<?php ... ?>代码块,则它们之间不应有任何空格。(注意:如果你有自动构造的代码,你可能有多个块)

还要确保代码中没有任何字节顺序标记,例如,当脚本的编码为带有BOM的UTF-8时。

相关问题:


查看完整回答
反对 回复 2019-05-20
?
SMILET

TA贡献1796条经验 获得超4个赞

没有看到任何东西。该页面为空白色。

也被称为白页死亡白色死亡屏幕。当关闭错误报告并发生致命错误(通常是语法错误)时会发生这种情况。

如果启用了错误日志记录,您将在错误日志中找到具体的错误消息。这通常位于名为“php_errors.log”的文件中,可以位于中心位置(例如,/var/log/apache2在许多Linux环境中),也可以位于脚本本身的目录中(有时在共享托管环境中使用)。

有时,暂时启用错误显示可能更为直接。然后白页将显示错误消息。请小心,因为访问该网站的每个人都可以看到这些错误。

这可以通过在脚本顶部添加以下PHP代码来轻松完成:

ini_set('display_errors', 1); error_reporting(~0);

代码将打开错误显示并将报告设置为最高级别。

由于ini_set()在运行时执行它对解析/语法错误没有影响。这些错误将出现在日志中。如果要在输出中显示它们(例如在浏览器中),则必须将display_startup_errors指令设置为true运行之前php.ini或之中.htaccess或通过影响配置的任何其他方法执行此操作。

您可以使用相同的方法设置log_errorserror_log指令以选择您自己的日志文件位置。

查看日志或使用显示,您将获得更好的错误消息和脚本停止的代码行。

相关问题:

相关错误:


查看完整回答
反对 回复 2019-05-20
?
潇湘沐

TA贡献1816条经验 获得超6个赞

$this是PHP中的一个特殊变量,无法分配。如果在不存在的上下文中访问它,则会发出此致命错误。

可能会发生此错误:

  1. 如果静态调用非静态方法。例:

    class Foo {
       protected $var;
       public function __construct($var) {
           $this->var = $var;
       }
    
       public static function bar () {
           // ^^^^^^
           echo $this->var;
           //   ^^^^^
       }}Foo::bar();

    如何修复:再次检查代码,$this只能在对象上下文中使用,绝不能在静态方法中使用。此外,静态方法不应访问非静态属性。使用self::$static_property访问静态属性。

  2. 如果将类方法中的代码复制到普通函数或仅复制到全局范围保留$this特殊变量。
    如何修复:查看代码并替换$this为不同的替换变量。

相关问题:

  1. 将非静态方法称为静态:PHP致命错误:在不在对象上下文中时使用$ this

  2. 复制代码:致命错误:在不在对象上下文中时使用$ this

  3. 所有“在不在对象上下文中时使用$ this”对Stackoverflow的问题


查看完整回答
反对 回复 2019-05-20
  • 6 回答
  • 0 关注
  • 741 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信