我想知道从php中保存图像的最佳方法。
目前我正在使用
file_put_contents($pk, file_get_contents($PIC_URL));
这不太理想。我无法使用卷曲。有专门针对此的方法吗?
答案 0 :(得分:7)
使用file_get_contents很好,除非文件非常大。在这种情况下,你并不需要将整个事物保存在内存中。
对于大型检索,您可以fopen远程文件,fread,例如,每次32KB,并fwrite在本地循环,直到所有文件都已存在读取。
例如:
$fout = fopen('/tmp/verylarge.jpeg', 'w');
$fin = fopen("http://www.example.com/verylarge.jpeg", "rb");
while (!feof($fin)) {
$buffer= fread($fin, 32*1024);
fwrite($fout,$buffer);
}
fclose($fin);
fclose($fout);
(为简单起见,没有错误检查!)
或者,您可以放弃使用url wrappers并使用类似PEAR HTTP_Request的类,或者使用fsockopen等来推送您自己的HTTP客户端代码。这样可以让您做有效的事情如果要维护远程文件的缓存,请发送If-Modified-Since标头。
答案 1 :(得分:2)
我建议使用Paul Dixon的策略,但用fsockopen()取代fopen。原因是某些服务器配置禁止对fopen()和file_get_contents()进行URL访问。该设置可以在php.ini中找到,名为allow_url_fopen。