php圧縮ファイルzipの例
1. 最初に用意したzip.phpツールクラスをダウンロードし、ダウンロード後解凍し、中のファイルを仮想ディレクトリ配下のincludeフォルダに置きます。真ん中。
2. 次のコードを php ファイルに追加するだけです
使用方法:
require_once "./include/zip.php";
$zip = new PHPZip();
//$zip ->ディレクトリアドレス", "圧縮ファイル名.zip"); //生成のみで自動ダウンロードはしません
$zip -> downloadZip("圧縮するフォルダディレクトリアドレス", "圧縮ファイル名.zip"); //自動ダウンロード
例: 特定の使用シナリオを確認するには、以下の疑似コードを参照できます: Code
require_once "./include/zip.php";
if (!$download) {
exit ();
}
set_time_limit( 60);
$tmpManager = new TmpManager() //次の操作を完了するクラスがあるとします
$tempfolder = array();
$tempfile = array(); // 選択したフォルダーまたはファイルをダウンロードするとします。ページ上のチェックボックスを選択して一緒にパッケージ化します
for($i = 0;$i < $checkboxnum;$i ) {
$value = ${"select" .$i};
if ($value ! = ) {
$this_type = substr($value, 0, 1);
$this_id = substr($value, 1);
//フォルダーとファイルを変換 個別に処理
if ($this_type == d) {
$ tempfolder[] = $this_id;
}
elseif ($this_type == f) {
$tempfile[] = $this_id;
}
}
}
@mkdir($tempdir);
$curtempdir = "$tempdir /".$userid; //異なるユーザーが異なる一時フォルダーで操作します
if (file_exists($curtempdir)) {
$tmpManager->DeleteDir( $curtempdir); //古いフォルダーを削除します
}
if (sizeof( $tempfolder) > 0 || sizeof($tempfile) > 0) {
mkdir($curtempdir, 0777) // 必要に応じて、フォルダーを再作成します
}
if (sizeof($tempfile) ) > 0) {
$tmpManager->CopyFile($tempfile,$curtempdir); //ダウンロードするファイルをコピーしてフォルダーを作成します
}
if (sizeof($tempfolder) > 0) {
$tmpManager ->CopyFolder($tempfolder,$curtempdir); //作成したフォルダーにダウンロードするフォルダーをコピーします
}
$ zip = new PHPZip();
$zip ->downloadZip($curtempdir, "file_". date(Ymd).".zip");//パッケージ化してダウンロード
Compression class:
- php
- /*
- ファイル名: /include/zip.php
- 作成者: Horace 2009 /04/15
- */
- class PHPZip{
- var $dirInfo = array("0","0" );
- var $rootDir = ;
- var $datasec = array();
- var $ctrl_dir = array();
- var $eof_ctrl_dir = "x50x4bx05x06x00x00x00x00";
- var $old_offset = 0;
- function downloadZip(){
- createZip($dir,名前、本当);
- }
- function createZip($dir, $zipfilename, $autoDownload = false){
- if (@function_exists(gzcompress)){
- @set_time_limit("0");
- if (is_array($dir)){
- $ fd = fopen ($dir, "r");
- $fileValue = fread ($fd, filesize ($filename ));
- fclose ($fd);
- if (is_array($dir)) $ファイル名 = ベース名($dir);
- $this -> addFile($fileValue, "$filename");
- }else{
- $this->dirTree($dir,$dir);
- }
- $zipfilenametemp = time().$zipfilename;
- $out = $this -> filezip();
- $fp = fopen($zipfilenametemp, "w");
- fwrite($fp, $out 、strlen($out));
- fclose($fp);
- $filesize = filesize($zipfilenametemp);
- if ($filesize
- if($autoDownload){
- header( "Content-type: application/octet-stream");
- header("Content-disposition:attachment; filename=". $zipfilename);
- }
- echo $this -> filezip();
- } else{
- echo "zipエラーを作成!";
- }
- unlink($zipfilenametemp);
- }
- }
- //ディレクトリツリーを取得..
-
- function dirTree($directory,$rootDir ){
- グローバル $_SERVER,$dirInfo,$rootDir;
- $fileDir=$rootDir;
- $myDir=dir ($directory);
- while($file=$myDir->read()){
-
-
- if(is_dir("$directory/$file") and $file!="." and $file!=".."){
- $dirInfo[0] ;
- $rootDir = "$fileDir$file/";
- $this -> addFile(, "$rootDir");
- // ns フォルダーに進みます
-
- $this->dirTree("$directory/$file" ,$rootDir);
- }else{
- if($file!="." and $file!=". ."){
- $dirInfo[1] ;
- //$fd = fopen (" $directory/$file", "r");
-
- $fileValue = file_get_contents("$directory/$file" );
- //fclose ($fd);
-
- $this -> addFile ($fileValue, "$fileDir$file");
- }
- }
- }
- $myDir->
- function unix2DosTime($unixtime = 0) {
- $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
- if ($timearray[年]
- $timearray[年] = 1980;
- $timearray[mon] = 1;
- $timearray[月曜日] = 1;
- $timearray[時間] = 0;
- $timearray[分] = 0;
- $timearray[秒] = 0;
- } // end if
-
- return (($時間配列[年] - 1980)
- }
- function addFile($data, $name, $time = 0){
- $name = str_replace(, /, $name);
- $ dtime = dechex($this->unix2DosTime($time));
- $hexdtime = x 。 $dtime[6] 。 $dtime[7]
- 。バツ 。 $dtime[4] 。 $dtime[5]
- 。バツ 。 $dtime[2] 。 $dtime[3]
- 。バツ 。 $dtime[0] 。 $dtime[1];
- eval($hexdtime = " . $hexdtime . ";);
- $fr = "x50x4bx03x04";
- $fr .= "x14x00"; // 抽出するにはverが必要
- $fr .= "x00x00"; // 生成目的ビットフラグ
- $fr .= "x08x00"; // 圧縮方法
- $fr .= $hexdtime; // 最終更新日時
- // 「ローカル ファイル ヘッダー」セグメント
- $unc_len = strlen($data);
- $crc = crc32($data);
- $zdata = gzcompress($data);
- $c_len = strlen($zdata);
- $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // crc バグを修正
- $fr .= Pack(V, $crc); // crc32
- $fr .= Pack(V, $c_len); // 圧縮ファイルサイズ
- $fr .= Pack(V, $unc_len); // 非圧縮ファイルサイズ
- $fr .= Pack(v, strlen($name)); // ファイル名の長さ
- $fr .= Pack(v, 0); // 余分なフィールド長
- $fr .= $name;
- // "ファイルデータ" セグメント
- $fr .= $zdata;
- // "データ記述子" セグメント (オプションですが、アーカイブしない場合は必須です
) - // ファイルとして機能)
- $fr .= Pack(V, $crc); // crc32
- $fr .= Pack(V, $c_len); // 圧縮ファイルサイズ
- $fr .= Pack(V, $unc_len); // 非圧縮ファイルサイズ
- // このエントリを array
- $this に追加します
- -> datasec[] = $fr;
- $new_offset = strlen(implode(, $this->datasec));
- // 中央ディレクトリにレコードを追加します
- $cdrec = "x50x4bx01x02";
- $cdrec 。 = "x00x00"; //
- $cdrec が作成したバージョン .= "x14x00"; // 抽出に必要なバージョン
- $cdrec .= "x00x00"; // 生成目的ビットフラグ
- $cdrec .= "x08x00"; // 圧縮方法
- $cdrec .= $hexdtime; // 最終更新日時
- $cdrec .= Pack(V, $crc); // crc32
- $cdrec .= Pack(V, $c_len); // 圧縮ファイルサイズ
- $cdrec .= Pack(V, $unc_len); // 非圧縮ファイルサイズ
- $cdrec .= Pack(v, strlen($name) ); // ファイル名の長さ
- $cdrec .= Pack(v, 0 ); // 追加のフィールド長
- $cdrec .= Pack(v, 0 ); // ファイルコメントの長さ
- $cdrec .= Pack(v, 0 ); // ディスク番号 start
- $cdrec .= Pack(v, 0 ); // 内部ファイル属性
- $cdrec .= Pack(V, 32 ); // 外部ファイル属性 - アーカイブ ビット set
- $cdrec .= Pack(V, $this -> old_offset ); // ローカルヘッダーの相対オフセット
- $this -> old_offset = $new_offset;
- $cdrec .= $name;
// オプションの追加フィールド、ファイルコメント
http://www.bkjia.com/PHPjc/486133.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/486133.html技術記事
php压缩文件zipの例 1.请先下ダウンロード我標準备好的zip.php工具类、下載後解压、将里面の文件放入对应的目录中、我是放在虚拟目录下的include文件...
🎜🎜