9

以下代码在 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;

?>
4

2 回答 2

16

为那些将寻找答案的人发布一些 necroposting :)

我尝试做类似的事情 - 取消阻止并行 ajax 请求,其中一个需要长时间操作,另一个用于检查进度。我还每次都开始会话以写入新值并在之后立即停止。而且我ERR_RESPONSE_HEADERS_TOO_BIG在 Chrome 中也遇到了错误。

原因是Set-Cookie在我的情况下,PHP 在每个会话开始时都发送了标头。当长 ajax 请求完成时,服务器将所有Set-Cookie标头发送到浏览器。

为了解决这个问题,我通过在输出之前Set-Cookie调用 来删除标题。header_remove('Set-Cookie');

于 2015-05-14T01:33:16.987 回答
1

在这个问题中并非如此,但我认为如果服务器正在打印/回显太多数据(例如,出于调试目的),分享这个错误也可能会出现是有用的

于 2017-03-22T15:58:29.957 回答