以下代码在firefox上正确执行,但在Chrome上无法执行。后面总是显示“ERR_RESPONSE_HEADERS_TOO_BIG”。当我遍历包含超过10000个项目(文件)的文件夹时会发生此错误 - 它必须是长任务。
请任何人解释我如何避免此错误?如果我在ob_end_clean();
之后“回显”某事,那么错误就会消失<?php
ini_set('max_execution_time', 600);
function FileItemsCount($it, &$count_ref)
{
foreach ($it as $file)
{
$count_ref += 1;
ob_start();
session_start();
$_SESSION['progress'] = $count_ref;
session_write_close();
ob_end_clean() ;
$is_folder = $it->hasChildren();
if ($is_folder)
{
FileItemsCount($it->getChildren(), $count_ref);
}
}
}
$dir = "C:/Users/sstefanov/xampp";
$it = new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS);
$count = 0;
FileItemsCount($it, $count);
echo $count;
?>
答案 0 :(得分:13)
对于那些会搜索答案的人来说,有些人会进行尸体解剖:)
我尝试做类似的事情 - 取消阻止并行的ajax请求,其中一个请求长操作,另一个请求检查进度。
我每次都开始会话以写入新值并在之后立即停止。我在Chrome中也遇到了ERR_RESPONSE_HEADERS_TOO_BIG
错误。
原因是PHP在我的情况下为每个会话启动发送了Set-Cookie
标头。当ajax请求完成时,服务器会将所有Set-Cookie
标头发送到浏览器。
要解决此问题,我通过调用删除了Set-Cookie
标头
输出前header_remove('Set-Cookie');
。
答案 1 :(得分:0)
在这个问题中并非如此,但我认为如果服务器打印/回显太多数据(例如用于调试目的),分享这个错误也会很有用。