1

画像にリンクするURLがいくつかあり、それらの画像を使用して.zipファイルを作成できるようにしたいと考えています。基本的に、ユーザーは自分の画像をダウンロードできます。

画像がサーバー上にありません。各ユーザーが独自の帯域幅を使用する方法でこれらのファイルを圧縮する方法はありますか?

そうでない場合、この問題の最善の解決策は何ですか?(PHPまたはJavascript)

編集:なぜ2つの反対票?私はコードを求めていません。2つの質問があります:1)サーバーの帯域幅を使用せずに画像をダウンロードしてZIPすることはできますか?2)いいえの場合、最善の解決策は何ですか。

4

2 に答える 2

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));
于 2012-11-15T11:29:33.870 に答える
3

JSでは、ajaxを使用して画像をダウンロードし(ここでは、ajaxを使用してバイナリデータをダウンロードすることについての考えがあります)、JS ZIPライブラリ(たとえば、http: //stuartk.com/jszip/)を使用してデータをパックすることができます。サーバーの帯域幅はありません。使用されます。

もう1つの可能性は、画像をサーバーにダウンロードし(たとえば、cURLを使用して)、それらをzipして(たとえば、ZipArchiveクラスを使用して)、クライアントに送信することです。このソリューションは、サーバーの帯域幅を使用します。

于 2012-11-15T11:28:55.120 に答える