使用 PHP 流式传输大文件
当处理超出 PHP 内存限制的大文件时,有必要将文件直接流式传输到 PHP用户的浏览器,而不将其完全加载到内存中。这种技术可以有效地处理大数据,而不会导致内存耗尽问题。
流式传输文件的一种方法是使用 file_get_contents() 函数。然而,这种方法需要将整个文件加载到内存中,这对于大文件来说是不可行的。
为了克服这个限制,我们可以实现分块方法,将文件分成更小的块并进行流式传输依次。下面是推荐的方法:
define('CHUNK_SIZE', 1024*1024); // Size (in bytes) of tiles chunk // Read a file and display its content chunk by chunk function readfile_chunked($filename, $retbytes = TRUE) { $buffer = ''; $cnt = 0; $handle = fopen($filename, 'rb'); if ($handle === false) { return false; } while (!feof($handle)) { $buffer = fread($handle, CHUNK_SIZE); echo $buffer; ob_flush(); flush(); if ($retbytes) { $cnt += strlen($buffer); } } $status = fclose($handle); if ($retbytes && $status) { return $cnt; // return num. bytes delivered like readfile() does. } return $status; } if (/* User is logged in */) { $filename = 'path/to/your/file'; $mimetype = 'mime/type'; header('Content-Type: '.$mimetype); readfile_chunked($filename); } else { echo 'Access denied.'; }
在此代码中,readfile_chunked() 函数将文件划分为 1MB 的块,并将每个块传输到用户的浏览器。刷新输出缓冲区可确保立即发送块,而无需等待读取整个文件。
通过实施此方法,您可以有效地将大文件流式传输给用户,而不会遇到内存问题。
以上是如何在 PHP 中传输大文件而不超出内存限制?的详细内容。更多信息请关注PHP中文网其他相关文章!