我有几个链接到图片的网址,我希望能够使用这些图片制作.zip文件。用户可以基本上下载自己的图像。
图片不在我的服务器上,有没有办法以每个用户使用自己的带宽的方式压缩这些文件?
如果没有,这个问题的最佳解决方案是什么? (PHP或Javascript)
编辑:为什么2个downvotes?我不是要求代码。 我有两个问题: 1)我可以在不使用服务器带宽的情况下下载图像并将其压缩吗? 2)如果不是,那么最佳解决方案是什么。
答案 0 :(得分:7)
1.要下载图像,如果http://example.com/image.php将图像作为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)否则使用cURL:
$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创建zip。
$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.要使用以下行来传输zip文件,
$zipfilename = 'file.zip';
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename=file.zip');
header('Content-Length: ' . filesize($zipfilename));
答案 1 :(得分:3)
JS可以通过使用ajax下载图像(here是关于使用ajax下载二进制数据的一些想法)和一些JS ZIP库(例如http://stuartk.com/jszip/)来打包数据 - 然后没有将使用服务器带宽。
另一种可能性是将图像下载到服务器(例如使用cURL),压缩它们(例如使用ZipArchive类)并发送到客户端 - 此解决方案使用服务器带宽。