在php中存储来自URL的图像的最佳方法?

时间:2009-01-28 14:08:31

标签: php

我想知道从php中保存图像的最佳方法。

目前我正在使用

file_put_contents($pk, file_get_contents($PIC_URL));

这不太理想。我无法使用卷曲。有专门针对此的方法吗?

2 个答案:

答案 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。