【问题标题】:PHP - Memory Limit. Trying to read large file (72mb)PHP - 内存限制。试图读取大文件(72mb)
【发布时间】:2017-12-06 11:50:52
【问题描述】:

我有一个处理大型文本文件的脚本。 但是,我受到文件大小的限制。 我在这个论坛上做了一些搜索,我得出的结论是我必须逐行处理文件,但这给我带来了很多问题,因为我需要文件中的一些详细信息,在我开始处理它之前。

我尝试将每一行添加到一个变量中,如下所示:

$content = "";
$handle = fopen($target_File, "r") or die("Couldn't get handle");
if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 256);
        // Process buffer here..
        $content .= $buffer;
    }
    fclose($handle);
}

正如预期的那样,它没有工作。

谁能帮帮我?

【问题讨论】:

  • 好吧,只是将行逐一添加到字符串变量中,当然需要大致相同的内存量,就好像您一开始就将其读入字符串一样... “但是这给我带来了很多问题,因为我需要文件中的一些详细信息,然后才能开始处理它” – 那么您需要向我们提供更多详细信息在那...
  • 文本文件是一个 gcode,该文件包含有关有多少层等的信息。这是我需要开始计算的信息。
  • 也许你可以逐行读取文件(就像你已经做的那样)并为你的文件创建一个“计划”。例如。 “layer1”数据从文件第 23 行开始,依此类推。稍后您可以直接访问此行并只读您真正需要的部分。

标签: php file-upload


【解决方案1】:

将此添加到您的文件顶部

ini_set("memory_limit", -1);

小心,页面可以使用服务器上的所有内存

【讨论】:

  • 我已经试过了 - 我的主机不允许超过 1024M - 无论我的设置如何:/ 它仍然因为内存而超时(内存不足(分配 811859968)(试图分配72 字节))
  • 对不起,我做错了。 ini_set("memory_limit", -1)
【解决方案2】:
$content = "";
$handle = fopen($target_File, "r") or die("Couldn't get handle");
if ($handle) {
    while (($buffer = fgets($handle, 4096))!== false) {
        // Process buffer here..
        $content .= $buffer;
    }
    fclose($handle);
}

$content = "";
$target_File ="/tmp/uploadfile.txt";
$handle = fopen($target_File, "r") or die("Couldn't get handle");

if ($handle) {
    while (!feof($handle)) {
        $buffer = fgets($handle, 4096);
        // Process buffer here.. 
        //$content .= $buffer;
    }
    fclose($handle);
}

注意:

如果问题是由于达到内存限制引起的,您可以尝试将其设置为更高的值(这取决于 php 的配置是否有效)。

这会将内存限制设置为32 Mb

ini_set("memory_limit","32M");

【讨论】:

  • 编辑缓冲区大小没有任何区别,因为它限制了它的服务器内存限制。
  • 它仍然给我同样的错误:/似乎我只是受到服务器的限制!
猜你喜欢
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 2014-02-06
  • 1970-01-01
  • 2020-01-26
相关资源
最近更新 更多