【问题标题】:PHP Memory accessPHP 内存访问
【发布时间】:2020-10-24 08:59:06
【问题描述】:

我们可以像在 C/C++ 中那样使用 PHP 访问系统的一些堆内存吗?实际上,我在尝试在 PHP 中执行一些大文件操作时不断收到Fatal error: Allowed memory size of 134217728 bytes exhausted

我知道我们可以在 Apache2 配置中调整这个限制。但是,为了处理大型未知大小的文件和数据,我们可以通过某种方式访问​​堆来处理和保存文件吗?另外,如果是,那么是否有使用后清除内存的机制?

示例代码

<?php
    $filename = "a.csv";
    $handle = fopen($filename, "r");
    $contents = fread($handle, filesize($filename));
    echo $contents;
    fclose($handle);
?>

在这里,a.csv 是一个 80mb 的文件。可以使用某种指针进行堆操作吗?

【问题讨论】:

  • 如果您解释/显示您尝试执行的文件操作的类型/大小 - 向我们展示相关代码 - 可能会有更有效的方法来解决您的(内存)问题。
  • 信息不足。可能能够以块的形式迭代文件内容,但不超过限制。
  • 您现在可以提出一些建议吗?我添加了示例代码供参考
  • 正如你所说的你知道 c/c++,你应该知道你不会一次打开文件,所以同样适用于任何其他语言。

标签: php memory heap-memory


【解决方案1】:

您是否尝试过分块读取文件,例如:

<?php
$chunk = 256 * 256; // set chunk size to your liking
$filename = "a.csv";
$handle = fopen($filename, 'rb');
while (!feof($handle))
{
    $data = fread($handle, $chunk);
    echo $data;
    ob_flush();
    flush();
}
fclose($handle);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2011-11-22
    相关资源
    最近更新 更多