PHP 内存访问
PHP Memory access
我们可以像 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的文件。是否可以使用某种指针进行堆操作?
您是否尝试过分块读取文件,例如:
<?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);
我们可以像 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的文件。是否可以使用某种指针进行堆操作?
您是否尝试过分块读取文件,例如:
<?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);