フォルダーを zip ファイルに圧縮するための PHP コード
Jun 13, 2016 pm 12:20 PM
1. 最初に用意したzip.phpツールクラスをダウンロードし、ダウンロード後解凍し、中のファイルを仮想ディレクトリ下のincludeフォルダに置きます。
2. 次のコードを PHP ファイルに追加します
コードをコピーします コードは次のとおりです:
require_once " ./include/zip.php";
$zip = new PHPZip();
//$zip -> "圧縮対象フォルダのディレクトリアドレス", "圧縮ファイル名.zip "); //生成のみで自動(dòng)ダウンロードはしない
$zip -> downloadZip("圧縮対象フォルダのディレクトリアドレス", "圧縮ファイル名.zip"); //自動(dòng)ダウンロード
例: 次の疑似コードを參照して、特定の使用シナリオを確認(rèn)できます:
コード
コードをコピー コードは次のとおりです。
require_once "./include/zip.php";
if (!$download) {
exit();
set_time_limit(60) ;
$ tmpManager = new TmpManager() //後続の操作を完了するためのクラスがあると仮定します
$tempfile = array();ページを渡します チェックボックスを選択して、選択したフォルダーまたはファイルをダウンロードし、まとめてパッケージ化します
for($i = 0;$i < $checkboxnum;$i ) {
$value = ${"select" .$ i};
if ($value != '') {
$this_type = substr($value, 0, 1); >/ / フォルダーとファイルを別々に処理します
if ($this_type == 'd') {
$tempfolder[] = $this_id;
}
elseif ($this_type == 'f ') {
$tempfile[] = $this_id;
}
}
}
@mkdir($tempdir) = "$tempdir/".$userid ; / /異なるユーザーが異なる一時(shí)フォルダーで操作します
if (file_exists($curtempdir)) {
$tmpManager->DeleteDir($curtempdir) //古いフォルダーを削除します
}
if (sizeof( $tempfolder) > 0 || sizeof($tempfile) > 0) {
mkdir($curtempdir, 0777); // パッケージ化するファイルまたはフォルダーがある場(chǎng)合は、それらを再作成します。 >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"); //
zip をパッケージ化してダウンロードします。 .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, $zipfilename, true);
}
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)) $filename = Basename($dir);
$this -> addFile($fileValue, "$ファイル名");
}else{
$this->dirTree($dir,$dir);
}
$zipfilenametemp = time().$zipfilename;
$out = $this ->ファイルzip();
$fp = fopen($zipfilenametemp, "w");
fwrite($fp, $out, strlen($out));
fclose($fp);
$filesize = filesize($zipfilenametemp);
if ($filesize < 104857600) {
if($autoDownload){
header("Content-type: application/octet-stream");
header("Content-disposition:attachment; filename=".$zipfilename);
}
echo $this ->ファイルzip();
}else{
echo "zip エラーが発生しました!";
}
unlink($zipfilenametemp);
}
}
//ディレクトリ ツリーを取得します。
function dirTree($directory,$rootDir){
global $_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");
//n のフォルダーに移動(dòng)
$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->close();
}
function unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
if ($timearray['year'] < 1980) {
$timearray['year'] = 1980;
$timearray['mon'] = 1;
$timearray['mday'] = 1;
$timearray['hours'] = 0;
$timearray['分'] = 0;
$timearray['秒'] = 0;
} // end if
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
($timearray['時(shí)間'] << 11) | ($timearray['分'] << 5) | ($timearray['秒'] >> 1);
}
function addFile($data, $name, $time = 0){
$name = str_replace('\', '/', $name);
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = 'x' 。 $dtime[6] 。 $dtime[7]
。 'x' 。 $dtime[4] 。 $dtime[5]
。 'x' 。 $dtime[2] 。 $dtime[3]
。 'x' 。 $dtime[0] 。 $dtime[1];
eval('$hexdtime = "' . $hexdtime . '";');
$fr = "x50x4bx03x04";
$fr .= "x14x00"; //
$fr .= "x00x00"; を抽出するために必要なバージョン// 生成目的ビットフラグ
$fr .= "x08x00"; // 圧縮方式
$fr .= $hexdtime; // 最終更新日時(shí)
// 「ローカル ファイル ヘッダー」セグメント
$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)); // ファイル名の長(zhǎng)さ
$fr .= Pack('v', 0); // 追加のフィールド長(zhǎng)
$fr .= $name;
// 「ファイルデータ」セグメント
$fr .= $zdata;
// 「データ記述子」セグメント (オプションですが、アーカイブがファイルとして提供されない場(chǎng)合は必要です
//)
$fr .= Pack('V', $crc); // crc32
$fr .= Pack('V', $c_len); // 圧縮ファイルサイズ
$fr .= Pack('V', $unc_len); // 非圧縮ファイルサイズ
// このエントリを配列
$this -> に追加します。データセック[] = $fr;
$new_offset = strlen(implode('', $this->datasec));
// 中央ディレクトリレコードに追加します
$cdrec = "x50x4bx01x02";
$cdrec .= "x00x00"; //
$cdrec によって作成されたバージョン .= "x14x00"; // 抽出に必要なバージョン
$cdrec .= "x00x00"; // 生成目的ビットフラグ
$cdrec .= "x08x00"; // 圧縮方式
$cdrec .= $hexdtime; // 最終更新日時(shí)
$cdrec .= Pack('V', $crc); // crc32
$cdrec .= Pack('V', $c_len); // 圧縮ファイルサイズ
$cdrec .= Pack('V', $unc_len); // 非圧縮ファイルサイズ
$cdrec .= Pack('v', strlen($name) ); // ファイル名の長(zhǎng)さ
$cdrec .= Pack('v', 0 ); // 余分なフィールド長(zhǎng)
$cdrec .= Pack('v', 0 ); // ファイルコメントの長(zhǎng)さ
$cdrec .= Pack('v', 0 ); // ディスク番號(hào)の開始
$cdrec .= Pack('v', 0 ); // 內(nèi)部ファイル屬性
$cdrec .= Pack('V', 32 ); // 外部ファイル屬性 - 'archive' ビットセット
$cdrec .= Pack('V', $this -> old_offset ); // ローカルヘッダーの相対オフセット
$this -> old_offset = $new_offset;
$cdrec .= $name;
// オプションの追加フィールド。ここにファイル コメントが入ります
// 中央ディレクトリに保存
$this -> ctrl_dir[] = $cdrec;
}
function filezip(){
$data = implode('', $this -> datasec);
$ctrldir = implode('', $this -> ctrl_dir);
return
$data 。
$ctrldir 。
$this -> eof_ctrl_dir 。
pack('v', sizeof($this -> ctrl_dir)) 。 // 「このディスク上」のエントリの合計(jì)數(shù)
pack('v', sizeof($this -> ctrl_dir)) 。 // 全體のエントリの合計(jì)數(shù)
pack('V', strlen($ctrldir)) 。 // 中央ディレクトリのサイズ
pack('V', strlen($data)) 。 // 中央ディレクトリの先頭へのオフセット
"x00x00"; // .zip ファイルのコメントの長(zhǎng)さ
}
}
?>
zip.php文件打包

ホットAIツール

Undress AI Tool
脫衣畫像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫真を作成する AI 搭載アプリ

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

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版
中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

まず、評(píng)判の良いデジタル資産プラットフォームを選択します。 1. Binance、Ouyi、Huobi、Damen Exchangeなどの主流のプラットフォームを推奨します。 2。公式Webサイトにアクセスして「登録」をクリックし、電子メールまたは攜帯電話番號(hào)を使用して、高強(qiáng)度のパスワードを設(shè)定します。 3.電子メールまたは攜帯電話検証コードの検証を完了します。 4.ログインした後、身元確認(rèn)(KYC)を?qū)g行し、身元証明文書を送信し、完全な顔認(rèn)識(shí)を提出します。 5. 2要素のID検証(2FA)を有効にし、獨(dú)立したファンドのパスワードを設(shè)定し、定期的にログインレコードを確認(rèn)してアカウントのセキュリティを確保し、最終的にUSDT仮想通貨アカウントを開いて管理します。

國(guó)際的にはブロックチェーンデジタルアセット取引プラットフォームとして、Binanceはユーザーに安全で便利な取引體験を提供します。その公式アプリは、市場(chǎng)視聴、資産管理、通貨取引、FIAT通貨取引など、複數(shù)のコア機(jī)能を統(tǒng)合しています。

適切なHTMLinputタイプを選択すると、データの精度を向上させ、ユーザーエクスペリエンスを向上させ、使いやすさを向上させることができます。 1.テキスト、電子メール、電話、番號(hào)、日付など、データ型に従って対応する入力タイプを選択します。 2。HTML5を使用して、より直感的な相互作用方法を提供できるU(xiǎn)RL、色、範(fàn)囲、検索などの新しいタイプを追加します。 3.プレースホルダーと必要な屬性を使用して、フォームフィリングの効率と精度を改善しますが、プレースホルダーがラベルを置き換えることはできないことに注意してください。

GOのHTTPログミドルウェアは、リクエストメソッド、パス、クライアントIP、および時(shí)間がかかることを記録できます。 1. http.handlerfuncを使用してプロセッサをラップします。2。next.servehttpを呼び出す前後の開始時(shí)間と終了時(shí)間を記録します。完全なサンプルコードの実行が検証されており、中小のプロジェクトの開始に適しています。拡張機(jī)能の提案には、ステータスコードのキャプチャ、JSONログのサポート、リクエストIDトラッキングが含まれます。

Binanceは世界的に有名なデジタル資産取引プラットフォームであり、ユーザーに安全で安定した豊富な暗號(hào)通貨取引サービスを提供します。そのアプリは設(shè)計(jì)が簡(jiǎn)単で強(qiáng)力で、さまざまなトランザクションタイプと資産管理ツールをサポートしています。

YIIのマスターになるには、次のスキルを習(xí)得する必要があります。1)YIIのMVCアーキテクチャを理解する、2)ActivereCordormの使用に習(xí)熟している、3)GIIコード生成ツールを効果的に利用する、4)マスターYIIの検証ルール、5)データベースクエリパフォーマンスを最適化する、6)これらのスキルの學(xué)習(xí)と実踐を通じて、YIIフレームワークの下での開発能力を包括的に改善することができます。

OKXは、世界的に有名な包括的なデジタル資産サービスプラットフォームであり、スムーズな運(yùn)用エクスペリエンスと強(qiáng)力な機(jī)能統(tǒng)合により、スポット、契約、オプションなどを含む多様な製品やサービスをユーザーに提供しています。

Binanceは、世界的に有名なデジタル資産取引プラットフォームの1つであり、ユーザーに安全で安定した便利な暗號(hào)通貨取引サービスを提供します。 Binanceアプリを使用して、いつでも市場(chǎng)の狀況を表示したり、購(gòu)入、販売、資産管理を行うことができます。
