目次
这篇文章主要介绍了关于php打包zip图片下载的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下" >这篇文章主要介绍了关于php打包zip图片下载的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
1.引入类包 zipfile" >1.引入类包 zipfile
2.实例" >2.实例
ホームページ バックエンド開発 PHPチュートリアル PHPでzipイメージのダウンロードをパッケージ化する方法

PHPでzipイメージのダウンロードをパッケージ化する方法

Jul 05, 2018 pm 03:34 PM
zip 画像ダウンロード

这篇文章主要介绍了关于php打包zip图片下载的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

1.引入类包 zipfile

class zipfile {
    var $datasec = array ();
    var $ctrl_dir = array ();
    var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
    var $old_offset = 0;
    
    function unix2_dostime($unixtime = 0){
        $timearray = ($unixtime == 0) ? getdate () : getdate($unixtime);        
        if ($timearray [&#39;year&#39;] < 1980){
            $timearray [&#39;year&#39;] = 1980;
            $timearray [&#39;mon&#39;] = 1;
            $timearray [&#39;mday&#39;] = 1;
            $timearray [&#39;hours&#39;] = 0;
            $timearray [&#39;minutes&#39;] = 0;
            $timearray [&#39;seconds&#39;] = 0;
        }
        return (($timearray [&#39;year&#39;] - 1980) << 25) | ($timearray [&#39;mon&#39;] << 21) | ($timearray [&#39;mday&#39;] << 16) | ($timearray [&#39;hours&#39;] << 11) | ($timearray [&#39;minutes&#39;] << 5) | ($timearray [&#39;seconds&#39;] >> 1);
    }
    function add_file($data, $name, $time = 0){
        $name = str_replace(&#39;\\&#39;, &#39;/&#39;, $name);
        
        $dtime = dechex($this->unix2_dostime($time));
        $hexdtime = &#39;\x&#39; . $dtime [6] . $dtime [7] . &#39;\x&#39; . $dtime [4] . $dtime [5] . &#39;\x&#39; . $dtime [2] . $dtime [3] . &#39;\x&#39; . $dtime [0] . $dtime [1];
        eval(&#39;$hexdtime = "&#39; . $hexdtime . &#39;";&#39;);
        
        $fr = "\x50\x4b\x03\x04";
        $fr .= "\x14\x00";
        $fr .= "\x00\x00";
        $fr .= "\x08\x00";
        $fr .= $hexdtime;
        
        $unc_len = strlen($data);
        $crc = crc32($data);
        $zdata = gzcompress($data);
        $zdata = substr(substr($zdata, 0, strlen($zdata)- 4), 2);
        $c_len = strlen($zdata);
        $fr .= pack(&#39;V&#39;, $crc);
        $fr .= pack(&#39;V&#39;, $c_len);
        $fr .= pack(&#39;V&#39;, $unc_len);
        $fr .= pack(&#39;v&#39;, strlen($name));
        $fr .= pack(&#39;v&#39;, 0);
        $fr .= $name;
        
        $fr .= $zdata;
        $fr .= pack(&#39;V&#39;, $crc);
        $fr .= pack(&#39;V&#39;, $c_len);
        $fr .= pack(&#39;V&#39;, $unc_len);
        
        $this->datasec [] = $fr;
        
        $cdrec = "\x50\x4b\x01\x02";
        $cdrec .= "\x00\x00";
        $cdrec .= "\x14\x00";
        $cdrec .= "\x00\x00";
        $cdrec .= "\x08\x00";
        $cdrec .= $hexdtime;
        $cdrec .= pack(&#39;V&#39;, $crc);
        $cdrec .= pack(&#39;V&#39;, $c_len);
        $cdrec .= pack(&#39;V&#39;, $unc_len);
        $cdrec .= pack(&#39;v&#39;, strlen($name));
        $cdrec .= pack(&#39;v&#39;, 0);
        $cdrec .= pack(&#39;v&#39;, 0);
        $cdrec .= pack(&#39;v&#39;, 0);
        $cdrec .= pack(&#39;v&#39;, 0);
        $cdrec .= pack(&#39;V&#39;, 32);
        
        $cdrec .= pack(&#39;V&#39;, $this->old_offset);
        $this->old_offset += strlen($fr);
        
        $cdrec .= $name;
        
        $this->ctrl_dir[] = $cdrec;
    }
    function add_path($path, $l = 0){
        $d = @opendir($path);
        $l = $l > 0 ? $l : strlen($path) + 1;
        while($v = @readdir($d)){
            if($v == &#39;.&#39; || $v == &#39;..&#39;){
                continue;
            }
            $v = $path . &#39;/&#39; . $v;
            if(is_dir($v)){
                $this->add_path($v, $l);
            } else {
                $this->add_file(file_get_contents($v), substr($v, $l));
            }
        }
    }
    function file(){
        $data = implode(&#39;&#39;, $this->datasec);
        $ctrldir = implode(&#39;&#39;, $this->ctrl_dir);
        return $data . $ctrldir . $this->eof_ctrl_dir . pack(&#39;v&#39;, sizeof($this->ctrl_dir)) . pack(&#39;v&#39;, sizeof($this->ctrl_dir)) . pack(&#39;V&#39;, strlen($ctrldir)) . pack(&#39;V&#39;, strlen($data)) . "\x00\x00";
    }
    
    function add_files($files){
        foreach($files as $file){
            if (is_file($file)){
                $data = implode("", file($file));
                $this->add_file($data, $file);
            }
        }
    }
    function output($file){
        $fp = fopen($file, "w");
        fwrite($fp, $this->file ());
        fclose($fp);
    }
}
ログイン後にコピー

2.实例

$dfile =  tempnam(&#39;/tmp&#39;, &#39;tmp&#39;);//产生一个临时文件,用于缓存下载文件
$zip = new \Org\Util\Zipfile();
//----------------------
$filename = &#39;二维码&#39;.date("Y-m-d H:i",time()).&#39;.zip&#39;; //下载的默认文件名
//以下是需要下载的图片数组信息,将需要下载的图片信息转化为类似即可
$params[&#39;ids&#39;] = explode(&#39;,&#39;,$params[&#39;ids&#39;]);

//获取图片
$image = array(
     array(&#39;image_src&#39; => &#39;pic1.jpg&#39;, &#39;image_name&#39; => &#39;图片1.jpg&#39;),
     array(&#39;image_src&#39; => &#39;pic2.jpg&#39;, &#39;image_name&#39; => &#39;pic/图片2.jpg&#39;),
);

foreach($image as $v){
    $zip->add_file(file_get_contents($v[&#39;image_src&#39;]),  $v[&#39;image_name&#39;]);
    // 添加打包的图片,第一个参数是图片内容,第二个参数是压缩包里面的显示的名称, 可包含路径
    // 或是想打包整个目录 用 $zip->add_path($image_path);
}
//----------------------
$zip->output($dfile);

// 下载文件
ob_clean();
header(&#39;Pragma: public&#39;);
header(&#39;Last-Modified:&#39;.gmdate(&#39;D, d M Y H:i:s&#39;) . &#39;GMT&#39;);
header(&#39;Cache-Control:no-store, no-cache, must-revalidate&#39;);
header(&#39;Cache-Control:pre-check=0, post-check=0, max-age=0&#39;);
header(&#39;Content-Transfer-Encoding:binary&#39;);
header(&#39;Content-Encoding:none&#39;);
header(&#39;Content-type:multipart/form-data&#39;);
header(&#39;Content-Disposition:attachment; filename="&#39;.$filename.&#39;"&#39;); //设置下载的默认文件名
header(&#39;Content-length:&#39;. filesize($dfile));
$fp = fopen($dfile, &#39;r&#39;);
while(connection_status() == 0 && $buf = @fread($fp, 8192)){
    echo $buf;
}
fclose($fp);
@unlink($dfile);
@flush();
@ob_flush();
exit();
ログイン後にコピー

值得一提的是 打包下载时中文文件夹或中文名出现乱码时可用下面方法解决

$name = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$name);
ログイン後にコピー

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

php web请求安全处理

php cocket的使用方法

以上がPHPでzipイメージのダウンロードをパッケージ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

HTML ファイルを ZIP に圧縮するためのベストガイド HTML ファイルを ZIP に圧縮するためのベストガイド Apr 09, 2024 pm 04:09 PM

HTML ファイルを ZIP に圧縮すると、ページの読み込み速度が向上します。方法には以下が含まれます: オンライン ツール (FileOptimizer、TinyPNG など) を使用する コマンド ライン ツール (gzip、7-zip など) を使用する Node.js スクリプトを使用する (zlib モジュールを使用する)

centos7でのファイル解凍コマンド(zip)の詳細説明 centos7でのファイル解凍コマンド(zip)の詳細説明 Jan 07, 2024 pm 06:30 PM

1. 圧縮フォルダーは zip ファイルです [root@cgls]#zip-rmydata.zipmydata2。mydata.zip を mydatabak ディレクトリに解凍します [root@cgls]#unzipmydata.zip-dmydatabak3.mydata01 フォルダーと mydata02.txt が圧縮されます。 mydata.zip[root@cgls]#zipmydata.zipmydata01mydata02.txt4. mydata.zip ファイルを直接解凍します [root@cgls]#unzipmydata.zip5. myd を表示します。

Linux圧縮zipコマンドの使い方 Linux圧縮zipコマンドの使い方 Oct 08, 2023 pm 01:25 PM

zip コマンドは、Linux システムで非常に便利な圧縮ツールです。 zip コマンドを使用すると、ファイルやディレクトリを zip ファイルに簡単に圧縮して、ストレージ容量を節約し、転送を容易にすることができます。 zipコマンドの基本構文は「zip [オプション] [圧縮ファイル名] [圧縮するファイルまたはディレクトリ]」です。

JavaでZip関数を使用してファイルを圧縮する方法 JavaでZip関数を使用してファイルを圧縮する方法 Jun 26, 2023 pm 02:10 PM

ファイルの圧縮は、ディスク容量とネットワーク送信時間を節約できる一般的な操作であり、Java にはファイル圧縮用の Zip 関数が用意されています。この記事では、Java で Zip 関数を使用してファイルを圧縮する方法を、詳細な紹介とデモ例を通して説明します。 1. Zip 関数の概要 Zip 関数は、Java で提供されている圧縮・パッケージ化ツールのライブラリで、ファイルやフォルダを Zip 形式のファイルに圧縮することができます。 ZipOutputStr は主に Zip 関数で使用されます

HTML ファイルの ZIP 圧縮の秘密を簡単にマスターする HTML ファイルの ZIP 圧縮の秘密を簡単にマスターする Apr 09, 2024 pm 05:36 PM

HTML ファイルの ZIP 圧縮は、Python の zipfile モジュールを通じて実現できます。 ZIP ファイル オブジェクトを作成します。 HTML ファイルを ZIP ファイルに追加します。 ZIP ファイル オブジェクトを閉じます。

Javaを使用してHuawei Cloud OBSオブジェクトストレージサービスを呼び出して画像をダウンロードする方法 Javaを使用してHuawei Cloud OBSオブジェクトストレージサービスを呼び出して画像をダウンロードする方法 Jul 08, 2023 am 10:09 AM

Java を使用して Huawei Cloud OBS Object Storage Service を呼び出して画像をダウンロードする方法 はじめに: Huawei Cloud OBS (ObjectStorage Service) は、安全で信頼性が高く、拡張性が高く、低コストのクラウド ストレージ サービスです。さまざまなシナリオで写真、ビデオ、ドキュメントなどの大量の非構造化データを保存および取得できる柔軟なストレージ ソリューションを提供します。この記事では、Java プログラミング言語を使用して Huawei Cloud OBS オブジェクト ストレージ サービスを呼び出し、画像ダウンロード機能を実装する方法を紹介します。ステップ1: ファーウェイクラウド

7zとzipではどちらがロスレスですか? 7zとzipではどちらがロスレスですか? Jan 19, 2021 pm 06:37 PM

7z と zip はどちらも可逆圧縮です。 7z は、非常に高い圧縮率を備えた主流の効率的な圧縮形式であり、ZIP ファイル形式は、データ圧縮およびドキュメント保存用のファイル形式です。 7z の方が圧縮率が高く、次に zip が続きます。zip 形式の方が一般的で幅広いテクノロジがあり、Windows オペレーティング システムはデフォルトで zip 形式をサポートしています。

Web サイトから画像をクロールし、ローカルに自動的にダウンロードします Web サイトから画像をクロールし、ローカルに自動的にダウンロードします Jun 13, 2023 pm 01:28 PM

インターネット時代では、人々はギャラリーやソーシャル プラットフォームなどのさまざまな Web サイトから写真をダウンロードすることに慣れてきました。少数の画像をダウンロードするだけであれば、手動操作は面倒ではありません。しかし、大量の写真をダウンロードする必要がある場合、手動で行うと非常に時間と労力がかかるため、自動化技術を活用して自動的にダウンロードする必要があります。この記事では、Python クローラー テクノロジを使用して、Web サイトからローカル コンピューターに画像を自動的にダウンロードする方法を紹介します。このプロセスは 2 つのステップに分かれています。最初のステップでは、Python のリクエスト ライブラリまたは

See all articles