首页 > 解决方案 > PHP:输出文件而不将其放入内存

问题描述

我在读取和输出图像文件时遇到了内存限制问题。我所做的是 - 检查文件是否存在,如果不存在,我从远程存储库获取文件,保存然后输出。问题是如何输出文件内容并跳过将文件放入内存?

$file = 'someimagefile.jpg';

if(file_exists($file)){
    exit(file_get_contents($file));
}
else{
    $fileContents = file_get_contents('http://somedomain.com/files/'.$file);
    $handle = fopen($file, 'w+');
    fwrite($handle, fileContents);
    fclose($handle);
    
    exit($fileContents);
}

据我了解,exit(file_get_contents($file))将文件放入内存。我知道有一种方法可以流式传输文件,但我不知道函数机制。这段代码会在不使用内存的情况下做同样的事情吗?:

if (file_exists($file)) {
    $file = fopen($file, 'r');
    exit(stream_get_contents($file));
}
else{
    $file = fopen('http://somedomain.com/files/'.$file, 'r');
    $dest = fopen($file, 'w+');
    
    
    stream_copy_to_stream ( $file , $dest );
    
    fclose($file);
    fclose($dest);
}

标签: phpmemorystream

解决方案


推荐阅读