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

这是什么?

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

为什么是这样?

诸如“头文件已发送”或“调用非对象成员”等问题经常在堆栈溢出时弹出。 这些问题的根本原因总是相同的。 所以这些问题的答案通常会重复它们,然后显示OP在他/她的特定情况下要改变哪条线。 这些答案不会给网站增加任何价值,因为它们只适用于OP的特定代码。 具有相同错误的其他用户不能轻易地从中读取解决方案,因为它们太本地化。 这很令人伤心,因为一旦你明白了根本原因,纠正错误就很简单。 因此,这份清单试图以通用的方式解释解决方案。

我应该在这里做什么?

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

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

列表

  • 什么都看不到。 该页面是空白的。 (也被称为白页/死亡屏幕)
  • 代码不运行/看起来像我的PHP代码的部分输出
  • 警告:不能修改标题信息 - 已经发送的标题
  • 警告:mysql_fetch_array()期望参数1是资源,布尔值又称为aka
    警告:mysql_fetch_array():提供的参数不是有效的MySQL结果资源aka
    警告:mysqli_num_rows()期望参数1为mysqli_result,给定的布尔值(或类似的变体)
  • 警告:[函数]期望参数1是资源,布尔给定
  • 警告:[功能]:未能打开流:[原因]
  • 警告:有效的open_basedir限制
  • 警告:除以零
  • 警告:非法字符串偏移'XXX'
  • 解析错误:语法错误,意外的'['
  • 解析错误:语法错误,意外的T_XXX
  • 解析错误:语法错误,意外的T_ENCAPSED_AND_WHITESPACE
  • 解析错误:语法错误,意外的T_PAAMAYIM_NEKUDOTAYIM
  • 解析错误:语法错误,意外的'require_once'(T_REQUIRE_ONCE),期望函数(T_FUNCTION)
  • 解析错误:语法错误,意外的T_VARIABLE
  • 致命错误:允许XXX字节内存大小用尽(试图分配XXX字节)
  • 致命错误:调用一个非对象的成员函数...
  • 致命错误:调用未定义函数XXX
  • 致命错误:无法重新声明XXX
  • 致命错误:不能在写入上下文中使用函数返回值
  • 致命错误:AAA :: BBB()声明必须与CCC :: BBB()'声明兼容
  • 致命错误:当不在对象上下文中时使用$ this
  • 注意:数组到字符串的转换
  • 注意:试图获取非对象错误的属性
  • 注意:未定义的变量
  • 注意:未定义的索引
  • 注意:未定义偏移量XXX [参考]
  • 注意:未初始化的字符串偏移量:XXX
  • 注意:使用未定义的常量XXX - 假定为“XXX”
  • MySQL:你的SQL语法有错误; 检查与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在......附近使用...
  • 严格标准:不应该静态调用非静态方法[<class> :: <method>]
  • 另见

  • 参考 - 这个符号在PHP中的含义是什么?

  • 警告:不能修改标题信息 - 已经发送的标题

    脚本尝试向客户端发送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时。

    相关问题:

  • PHP已经发送了头文件
  • 所有PHP“标题已发送”Stackoverflow的问题
  • 字节顺序标记
  • 什么PHP函数创建输出?

  • 致命错误:调用一个非对象的成员函数...

    发生类似于xyz->method()代码,其中xyz不是对象,因此该method不能被调用。

    这是一个致命的错误,它将停止脚本(向前兼容性注意:它将成为从PHP 7开始的可捕获错误)。

    大多数情况下,这表示代码缺少错误条件检查。 在调用其方法之前验证对象实际上是一个对象。

    一个典型的例子是

    // ... some code using PDO
    $statement = $pdo->prepare('invalid query', ...);
    $statement->execute(...);
    

    在上面的例子中,查询无法准备, prepare()会将false赋给$statement 。 试图调用execute()方法将导致致命错误,因为false是一个“非对象”,因为该值是一个布尔值。

    找出为什么你的函数返回一个布尔值而不是一个对象。 例如,检查$pdo对象是否发生了最后一个错误。 有关如何调试的详细信息取决于如何针对特定功能/对象/类处理错误。

    如果即使->prepare失败,那么你的$pdo数据库句柄对象也不会被传入当前作用域。 找到它的定义。 然后将其作为参数传递,将其存储为属性,或通过全局范围共享它。

    另一个问题可能是有条件地创建对象,然后尝试调用该条件块外部的方法。 例如

    if ($someCondition) {
        $myObj = new MyObj();
    }
    // ...
    $myObj->someMethod();
    

    通过试图在条件块外执行该方法,可能不会定义您的对象。

    相关问题:

  • 调用非对象上的成员函数
  • 列出所有PHP“致命错误:调用成员函数...在非对象上”Stackoverflow问题

  • 什么都看不到。 该页面是空白的。

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

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

    有时候可能会更直接地暂时显示错误。 白页将显示错误消息。 请注意,因为访问该网站的每个人都可以看到这些错误。

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

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

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

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

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

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

    相关问题:

  • PHP的死亡白屏
  • 死亡的白色屏幕!
  • PHP不显示错误消息
  • 错误发布500 PHP - 这是记录在哪里?
  • 如何在PHP中获取有用的错误消息?
  • 所有PHP“死亡白页”问题在Stackoverflow上
  • 相关错误:

  • 解析错误:语法错误,意外的T_XXX
  • 致命错误:调用一个非对象的成员函数...
  • 代码不运行/看起来像我的PHP代码的部分输出
  • 链接地址: http://www.djcxy.com/p/1871.html

    上一篇: What does this error mean in PHP?

    下一篇: PHP curly braces in array notation