我想阅读一个带有30k行的大型制表符分隔文件。然后我要分割线但是我得到max_execution_timeout,即使max_execution_time 90超时......
线条没有太多内容,我认为30k线应该是可能的?你有想法吗?
$handle = fopen($_FILES["myfile"]["tmp_name"], "r");
while (!feof($handle)) {
$line = fgets($handle);
$parts = preg_split('/\s+/', $line);
$line_id = $parts[0];
echo $line_id;
}
答案 0 :(得分:0)
您应该在PHP中检查两件事, max_execution_time 和 memory_limit 。此外,您可以尝试按块读取文件。
memory_limit :设置允许脚本分配的最大内存量(以字节为单位)。这有助于防止编写糟糕的脚本占用服务器上的所有可用内存。请注意,要没有内存限制,请将此指令设置为-1。
max_execution_time 这将设置允许脚本在解析器终止之前运行的最长时间(以秒为单位)。这有助于防止编写不良的脚本占用服务器。默认设置为30.从命令行运行PHP时,默认设置为0.
尝试这种方法,在这里你不是在内存中读取整个文件。运行它所需的最大内存取决于输入中的最长行。
$handle = fopen("/tmp/uploadfile.txt", "r") or die("Couldn't get handle");
ini_set('max_execution_time', 300);
ini_set('memory_limit','512M');
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
// your data processing here
}
fclose($handle);
}