php - 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);
}
解决方案
推荐阅读
- django - 使用 JSONRESPONSE 返回对象
- c# - string.Format 当格式为变量时
- scala - 另一个类的Scala方法引用?
- javascript - 减少数组列表,以设置公共路径
- go - 如何从变量分配结构的字段名称
- jquery - 无法通过 jQuery 表中的数组访问复选框
- css - 如何在 Time Picker boostrap 中删除 AM 或 PM
- docmosis - docmosis - 重复行(或部分)不包含大文本
- kubernetes - 将长配置文件传递给 Kubernetes
- embedded - 如何在大数据的拆分和缓冲块上计算 CRC32?