gpt4 book ai didi

PHP 5.6 : headers_sent intermittently returns true, 空文件名和第 0 行

转载 作者:可可西里 更新时间:2023-11-01 12:37:57 25 4
gpt4 key购买 nike

我的 PHP 脚本(PHP 5.6、Apache 2.2)间歇性地遇到这个问题:

Warning: Cannot modify header information - headers already sent in /path/to/index.php on line 55

这个警告没有我在其他问题中看到的“发送者”部分,所以我在违规的 header()setcookie 之前添加了这段代码() 调用:

if (headers_sent($filename, $linenum)){
echo("Output buffer: #" . ob_get_contents() . "#");
echo "Headers already sent in $filename on line $linenum: ";
print_r(headers_list());
}

这是问题发生时我得到的输出:

Output buffer: ##
Headers already sent in on line 0:
Array (
[0] => X-Powered-By: PHP/5.6.23
[1] => Content-type: text/html; charset=UTF-8
)

(旁注:我在 php.ini 中将 output_buffering 设置为 4096 字节,所以这两个 header 中的 63 个字符不应该被缓冲并等待更多字符,而不是过早发送吗?)

这个问题是在我第一次启动包含网络服务器的 Docker 容器时出现的。之后,当我调用 header()setcookie() 使用户登录或重定向到登录页面。

我已经阅读并重读了 this answer对于一般的“ header 已发送”错误,并且我已尽我所能排除了这些可能的原因:

  1. 在调用 setcookie()header()< 之前,HTML 会阻止或调用 printecho
  2. 我的 PHP 标签外的空格
  3. Material list
  4. auto_prepend_file php.ini 设置
  5. gzip 流编码 - 安装了 zlib,但 zlib.output_compression 已关闭
  6. 复制 extension= php.ini 设置

那个答案提到了

It's typically a PHP extension or php.ini setting if no error source is concretized.

所以,我现在正在查看我的扩展...get_loaded_extensions 给我一个包含这些条目的 51 长数组:

Core, date, ereg, libxml, openssl,
pcre, zlib, filter, hash, Reflection,
SPL, session, standard, apache2handler, bz2,
calendar, ctype, curl, dom, exif,
fileinfo, ftp, gd, gettext, iconv,
mysqlnd, PDO, Phar, posix, shmop,
SimpleXML, snmp, soap, sockets, sqlite3,
sysvmsg, sysvsem, sysvshm, tokenizer, xml,
xmlwriter, xsl, mysql, mysqli, pdo_mysql,
pdo_sqlite, wddx, xmlreader, json, zip, mhash

我没有使用所有这些,所以我计划检查并删除未使用的,希望其中一个是导致问题的原因。

最坏的情况,我会尝试增加我的 output_buffering 值或使用 ob_start()ob_end_flush() 开始和我的文件结束。我不知道为什么当我当前的 output_buffering 值为 4096 时这会修复它,而且我知道此解决方法有其自身的问题。

我在这里遗漏了什么——我需要检查其他可能的原因吗?我应该尝试不同的 PHP 版本,还是在没有扩展的干净 PHP 安装上运行我的代码子集?

编辑:添加了 ob_get_contents() 调用和输出,以及关于能够通过启动新的 Docker 容器来一致地重现它的信息。删除了有关我的 error_reporting 值的信息;更改它只会发现 always_populate_raw_post_data 弃用通知,修复它对此处描述的问题没有影响。

最佳答案

我过去曾看到过由于行结束格式引起的问题。您要将文件从一个操作系统环境移动到另一个操作系统环境吗?

有时隐藏的回车符 (/r) 或其他特殊的空白字符会导致这种情况,但在文件中不可见。

关于PHP 5.6 : headers_sent intermittently returns true, 空文件名和第 0 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42827556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com