我正在尝试通过他们的API从社交网站下载图像到ZipArchive,我使用以下代码:
...
public function downloadAlbumZip($album_name, $photos)
{
$zip = new ZipArchive();
$album_name = $this->_cleanAlbumName($album_name);
$filename = 'album.zip';
$file = tempnam(PHOTOS, "{$album_name}-").'.zip';
if ($zip->open($file, ZIPARCHIVE::CREATE) === TRUE)
{
foreach ($photos as $photo) {
$image = $photo['pid'] . '.jpg';
$binary = $this->_getImage($photo['src']);
$zip->addFromString($image, $binary);
}
$output = print_r($zip, true);
$zip->close();
exit('Zip Saved.<br /><a href="javascript:history.go(-1);">Back to Album Overview</a>');
} else {
die('Zip Failed.');
}
}
private function _getImage($img)
{
if ( function_exists('curl_init') )
{
$ch = curl_init($img);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$rawdata = curl_exec($ch);
curl_close($ch);
return $rawdata;
}
}
...
哪个有效,但速度很慢,经常以超时错误结束,有人可以推荐一种方法来加快速度吗?
由于
答案 0 :(得分:1)
您应首先下载所有图像,验证它们是否正常,然后在超时时重新下载。
您可以使用CURL_MULTI_EXEC并行执行来加快图片下载速度。
请记住,加速任何事情的关键是确定瓶颈所在。它是否正在压缩文件?如果是这种情况,您可以使用本机二进制和shell。是下载图像吗?这是图像的大小吗?
您应该进行一些分析,即使它只是回显time()
以查看哪些操作花费的时间最长。