Inhaltsverzeichnis
这篇文章主要介绍了关于php打包zip图片下载的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下" >这篇文章主要介绍了关于php打包zip图片下载的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
1.引入类包 zipfile" >1.引入类包 zipfile
2.实例" >2.实例
Heim Backend-Entwicklung PHP-Tutorial So packen Sie das Herunterladen von Zip-Bildern in PHP

So packen Sie das Herunterladen von Zip-Bildern in PHP

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);
    }
}
Nach dem Login kopieren

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();
Nach dem Login kopieren

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

$name = iconv(&#39;utf-8&#39;,&#39;gb2312&#39;,$name);
Nach dem Login kopieren

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

相关推荐:

php web请求安全处理

php cocket的使用方法

Das obige ist der detaillierte Inhalt vonSo packen Sie das Herunterladen von Zip-Bildern in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1673
14
PHP-Tutorial
1277
29
C#-Tutorial
1257
24
Beste Anleitung zum Komprimieren von HTML-Dateien in ZIP Beste Anleitung zum Komprimieren von HTML-Dateien in ZIP Apr 09, 2024 pm 04:09 PM

Das Komprimieren von HTML-Dateien in ZIP kann die Geschwindigkeit beim Laden von Seiten verbessern. Zu den Methoden gehören: Verwendung von Online-Tools (wie FileOptimizer, TinyPNG) Verwendung von Befehlszeilentools (wie z. B. gzip, 7-zip) Verwendung von Node.js-Skripten (mithilfe des zlib-Moduls)

Detaillierte Erläuterung des Dekomprimierungsdateibefehls (zip) unter Centos7 Detaillierte Erläuterung des Dekomprimierungsdateibefehls (zip) unter Centos7 Jan 07, 2024 pm 06:30 PM

1. Der komprimierte Ordner ist eine ZIP-Datei [root@cgls]#zip-rmydata.zipmydata2. Entpacken Sie mydata.zip in das Verzeichnis mydatabak [root@cgls]#unzipmydata.zip-dmydatabak3.mydata01 und mydata02.txt werden komprimiert mydata.zip[root@cgls]#zipmydata.zipmydata01mydata02.txt4. Dekomprimieren Sie direkt die Datei mydata.zip [root@cgls]#unzipmydata.zip5

So verwenden Sie den Linux-Komprimierungs-ZIP-Befehl So verwenden Sie den Linux-Komprimierungs-ZIP-Befehl Oct 08, 2023 pm 01:25 PM

Der Befehl zip ist ein sehr nützliches Komprimierungstool in Linux-Systemen. Mit dem Befehl „zip“ können Sie Dateien und Verzeichnisse ganz einfach in eine ZIP-Datei komprimieren, Speicherplatz sparen und die Übertragung erleichtern. Die grundlegende Syntax des Zip-Befehls lautet „zip [Optionen] [Name der komprimierten Datei] [zu komprimierende Datei oder Verzeichnis]“.

So verwenden Sie die Zip-Funktion in Java zur Dateikomprimierung So verwenden Sie die Zip-Funktion in Java zur Dateikomprimierung Jun 26, 2023 pm 02:10 PM

Das Komprimieren von Dateien ist ein gängiger Vorgang, der Speicherplatz und Netzwerkübertragungszeit sparen kann. Java bietet die Zip-Funktion zur Dateikomprimierung. In diesem Artikel wird anhand einer detaillierten Einführung und einer Beispieldemonstration gezeigt, wie die Zip-Funktion in Java zur Dateikomprimierung verwendet wird. 1. Einführung in die Zip-Funktion Die Zip-Funktion ist eine in Java bereitgestellte Komprimierungs- und Verpackungstoolbibliothek. Mit dieser Funktion können Sie eine Datei oder einen Ordner in eine Datei im Zip-Format komprimieren. ZipOutputStr wird hauptsächlich in der Zip-Funktion verwendet

Meistern Sie ganz einfach die Geheimnisse der ZIP-Komprimierung von HTML-Dateien Meistern Sie ganz einfach die Geheimnisse der ZIP-Komprimierung von HTML-Dateien Apr 09, 2024 pm 05:36 PM

Die ZIP-Komprimierung von HTML-Dateien kann über das Zipfile-Modul von Python erreicht werden: Erstellen Sie ein ZIP-Dateiobjekt. Fügen Sie HTML-Dateien zur ZIP-Datei hinzu. Schließen Sie das ZIP-Dateiobjekt.

So rufen Sie mit Java den Objektspeicherdienst Huawei Cloud OBS auf, um Bilder herunterzuladen So rufen Sie mit Java den Objektspeicherdienst Huawei Cloud OBS auf, um Bilder herunterzuladen Jul 08, 2023 am 10:09 AM

So rufen Sie mit Java den Huawei Cloud OBS Object Storage Service auf, um Bilder herunterzuladen. Einführung: Huawei Cloud OBS (ObjectStorage Service) ist ein sicherer, zuverlässiger, hoch skalierbarer und kostengünstiger Cloud-Speicherdienst. Es bietet flexible Speicherlösungen, mit denen große Mengen unstrukturierter Daten wie Bilder, Videos, Dokumente usw. in verschiedenen Szenarien gespeichert und abgerufen werden können. In diesem Artikel wird erläutert, wie Sie mit der Programmiersprache Java den Huawei Cloud OBS-Objektspeicherdienst aufrufen, um die Bild-Download-Funktion zu implementieren. Schritt 1: Huawei Cloud

Welches ist verlustfrei, 7z oder zip? Welches ist verlustfrei, 7z oder zip? Jan 19, 2021 pm 06:37 PM

7z und zip sind beide verlustfreie Komprimierungen. 7z ist ein gängiges und effizientes Komprimierungsformat mit einer sehr hohen Komprimierungsrate; das ZIP-Dateiformat ist ein Dateiformat zur Datenkomprimierung und Dokumentenspeicherung. 7z hat eine höhere Komprimierungsrate, gefolgt von zip; das Zip-Format ist häufiger und verfügt über eine breite Palette von Technologien, und das Windows-Betriebssystem unterstützt standardmäßig das Zip-Format.

Crawlen Sie Bilder von der Website und laden Sie sie automatisch lokal herunter Crawlen Sie Bilder von der Website und laden Sie sie automatisch lokal herunter Jun 13, 2023 pm 01:28 PM

Im Internetzeitalter haben sich die Menschen daran gewöhnt, Bilder von verschiedenen Websites wie Fotogalerien und sozialen Plattformen herunterzuladen. Wenn Sie nur eine kleine Anzahl Bilder herunterladen müssen, ist die manuelle Bedienung nicht umständlich. Wenn jedoch eine große Anzahl von Bildern heruntergeladen werden muss, wird der manuelle Vorgang sehr zeitaufwändig und mühsam. Zu diesem Zeitpunkt muss Automatisierungstechnologie eingesetzt werden, um das automatische Herunterladen von Bildern zu realisieren. In diesem Artikel wird erläutert, wie Sie mithilfe der Python-Crawler-Technologie Bilder automatisch von der Website auf den lokalen Computer herunterladen. Dieser Prozess ist in zwei Schritte unterteilt: Der erste Schritt besteht darin, die Anforderungsbibliothek oder s von Python zu verwenden

See all articles