0

我需要阅读一个大文件来找到一些标签并创建一个动态表单。我不能使用file()file_get_contents()因为文件大小。如果我使用以下代码逐行读取文件

set_time_limit(0);    
$handle = fopen($file, 'r');
    set_time_limit(0);
    if ($handle) {
        while (!feof($handle)) {
            $line = fgets($handle);
            if ($line) {            
             //do something.
            }
        }
    }

    echo 'Read complete';

我在 Chrome 中收到以下错误:

错误 101 (net::ERR_CONNECTION_RESET)

几分钟后出现此错误,因此max_input_time我认为不是问题。(设置为 60)。

4

3 回答 3

1

你用什么浏览器软件?阿帕奇,Nginx?您应该将最大接受文件上传设置在高于 500MB 的位置。此外,php.ini 中的最大上传大小也应该大于 500MB,我认为必须允许 PHP 生成大于 500MB 的进程。(在你的 php 配置中检查这个)。

于 2012-11-28T15:39:13.103 回答
1

设置内存限制ini_set("memory_limit","600M");还需要设置超时限制

set_time_limit(0);
于 2012-11-28T15:42:58.613 回答
0

通常,在用户等待它们完成时,不应执行长时间运行的进程。我建议使用可以处理此类工作并且可以查询作业状态(运行/完成/错误)的后台作业导向工具。

我的第一个猜测是中间的某些东西由于超时而中断了连接。无论是 Web 服务器超时(PHP 无法知道)还是某些防火墙,都没有关系,PHP 会收到关闭连接的信号并且脚本停止运行。您可以使用ignore-user-abort(true)来规避这种行为,这与 set_time_limit(0) 一起应该可以解决问题。

需要注意的是,任何导致连接中止的原因仍然会执行,尽管脚本仍然会完成它的工作。一个非常烦人的副作用是,这个脚本可能会被并行执行多次,而它们都没有完成。

同样,我建议使用一些后台任务来执行此操作,并为最终用户(浏览器)提供一个界面来验证该任务的状态。您还可以通过 cron 作业和保存状态的数据库/文本文件自己实现一个基本的。

于 2012-11-28T16:07:17.977 回答