6 回答
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时。
相关问题:
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_errors和error_log指令以选择您自己的日志文件位置。
查看日志或使用显示,您将获得更好的错误消息和脚本停止的代码行。
相关问题:
相关错误:
TA贡献1816条经验 获得超6个赞
$this
是PHP中的一个特殊变量,无法分配。如果在不存在的上下文中访问它,则会发出此致命错误。
可能会发生此错误:
如果静态调用非静态方法。例:
class Foo { protected $var; public function __construct($var) { $this->var = $var; } public static function bar () { // ^^^^^^ echo $this->var; // ^^^^^ }}Foo::bar();
如何修复:再次检查代码,
$this
只能在对象上下文中使用,绝不能在静态方法中使用。此外,静态方法不应访问非静态属性。使用self::$static_property
访问静态属性。如果将类方法中的代码复制到普通函数或仅复制到全局范围并保留
$this
特殊变量。
如何修复:查看代码并替换$this
为不同的替换变量。
相关问题:
将非静态方法称为静态:PHP致命错误:在不在对象上下文中时使用$ this
添加回答
举报