在php

时间:2017-11-25 21:33:00

标签: php file-handling

我有一个197gb的文本文件,我想阅读并将内容推送到MySql数据库。我知道,我不能把那个大文件放在PHP缓冲区中并整体读取它,所以我想读几百行作为一个时间并继续读下一个和下一个读整个文件。

我正在尝试这个,但页面没有返回任何内容

<?php
$i = 0;
$handle = fopen("./data/200gbfile.txt", "r") or die("Couldn't get handle");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
        echo $line . "<br />";
        if ($i > 100) {
            exit;
        }
        $i++;
    }
    fclose($handle);
} else {
    echo "Error Opeing File!";
}
?>

在php设置中是否有最大文件大小的限制?

  

编辑:对于有问题的197gb文件,fopen无法返回任何内容   输出页面只是空白。

2 个答案:

答案 0 :(得分:1)

您可以以块的形式读取文件以节省内存:

例如:

$fd = @fopen("./data/200gbfile.txt", "r");

while (!feof($fd)) {
   $data = fread($fd, 1024); // read the file in 1024kb chunks
   // handle current data (read line by line for example)
}
fclose($fd);

但不知道是否适用于100Gbytes +的文件。

Edit: @ with fopen is required as suggested by Roman.

答案 1 :(得分:-1)

您可以使用ini_set('memory_limit','16M');相应地设置尺寸,但我不会处理这样庞大的文件。从未测试过..