2012-11-15 52 views
1

我有几个链接到图像的URL,我希望能够使用这些图像创建.zip文件。基本上,用户可以下载他们自己的图像。下载图像并通过PHP将它们压缩到

图片不在我的服务器上,有没有办法以这样的方式压缩这些文件:每个用户使用自己的带宽?

如果不是,该问题的最佳解决方案是什么? (PHP或Javascript)

编辑:为什么2 downvotes?我没有要求代码。 我有2个问题: 1)我可以下载图像和ZIP他们没有使用我的服务器带宽? 2)如果不是,什么是最好的解决方案。

+0

卷曲,保存,压缩它们并添加到头部 –

+2

那么,什么是您的具体问题?您正在描述几项功能(获取远程文件,创建ZIP压缩文件,提供下载,跟踪每个用户消耗的带宽......)。如果你陷入了所有这些问题,你应该考虑雇用一名专业人员。这不是免费完成代码的网站。 –

回答

3

JS可以通过使用ajax下载图像(here是关于使用ajax下载二进制数据的一些想法)和某些JS ZIP库(例如http://stuartk.com/jszip/)来打包数据 - 则不会使用服务器带宽。

另一种可能性是将图像下载到服务器(例如使用cURL),将它们压缩(例如使用ZipArchive类)并发送到客户端 - 此解决方案使用服务器带宽。

+0

谢谢!所以这只是确保JS ZIP能够达到检索的AJAX数据的问题。 –

7

1.To下载图像,如果http://example.com/image.php hoding一个图像test.jpg放在

a)如果您有allow_url_fopen选项设置为true:

$url = 'http://example.com/image.php'; 
$img = '/tempfolder/test.jpg'; 
file_put_contents($img, file_get_contents($url)); 

B)否则使用卷曲:

$ch = curl_init('http://example.com/image.php'); 
$fp = fopen('/tempfolder/test.jpg', 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

2.要压缩所有文件,可以使用ziparchive创建压缩文件。

$files = array('test.jpg', 'test1.jpg'); 
$zipname = 'file.zip'; 
$zip = new ZipArchive; 
$zip->open($zipname, ZipArchive::CREATE); 
foreach ($files as $file) { 
    $zip->addFile($file); 
} 
$zip->close(); 

3.To流zip文件使用以下行,

$zipfilename = 'file.zip'; 
header('Content-Type: application/zip'); 
header('Content-disposition: attachment; filename=file.zip'); 
header('Content-Length: ' . filesize($zipfilename));