首页 > 后端开发 > php教程 > 如何在 PHP 中高效地传输大文件以避免内存耗尽?

如何在 PHP 中高效地传输大文件以避免内存耗尽?

Patricia Arquette
发布: 2024-12-05 14:38:15
原创
481 人浏览过

How Can I Efficiently Stream Large Files in PHP to Avoid Memory Exhaustion?

使用 PHP 流式传输大文件

在您希望安全地为用户提供大文件一次性下载而不消耗过多资源的场景中内存,问题出现了:如何高效地传输文件?

使用 file_get_contents() 的传统方法由于潜在的内存限制,同时检索整个文件内容被证明是不切实际的。要解决此问题,请考虑采用以可管理的块的形式提供数据的流式传输方法。

在线源中建议的一种解决方案是使用 readfile_chunked() 函数。此函数允许您指定块大小并迭代读取和输出文件内容,避免内存过载。

提供的代码示例演示了此方法的实现:

// Define the chunk size in bytes
define('CHUNK_SIZE', 1024*1024);

// Function to 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 the number of bytes delivered.
    }

    return $status;
}

// Restrict access to logged-in users
if ($logged_in) {
    $filename = 'path/to/your/file';
    $mimetype = 'mime/type';
    header('Content-Type: '.$mimetype );
    readfile_chunked($filename);
} else {
    echo 'Access denied.';
}
登录后复制

此方法以可管理的块的形式流式传输文件,避免内存限制并将文件有效地交付给用户。

以上是如何在 PHP 中高效地传输大文件以避免内存耗尽?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板