検索

  1. /*
  2. ファイル名: /include/zip.php
  3. 著者: Horace 2009/04/15
  4. */
  5. class PHPZip{
  6. var $dirInfo = array("0","0 ");
  7. var $rootDir = '';
  8. var $datasec = array();
  9. var $ctrl_dir = array();
  10. var $eof_ctrl_dir = "/x50/x4b/x05/x06/x00/x00/x00/x00";
  11. var $old_offset = 0;
  12. function downloadZip(){
  13. createZip($dir, $zipfilename, true);
  14. }
  15. function createZip($dir, $zipfilename, $autoDownload = false){
  16. if (@function_exists('gzcompress')){
  17. @set_time_limit("0");
  18. if (is_array($dir)){
  19. $fd = fopen ($dir, "r");
  20. $fileValue = fread ($fd, ファイルサイズ ($filename));
  21. fclose ($fd);
  22. if (is_array($dir)) $filename = Basename($dir);
  23. $this -> addFile($fileValue, "$ファイル名");
  24. }else{
  25. $this->dirTree($dir,$dir);
  26. }
  27. $zipfilenametemp = time().$zipfilename;
  28. $out = $this ->ファイルzip();
  29. $fp = fopen($zipfilenametemp, "w");
  30. fwrite($fp, $out, strlen($out));
  31. fclose($fp);
  32. $filesize = ファイルサイズ($zipfilenametemp);
  33. if ($filesize if($autoDownload){
  34. header("Content-type: application/octet-stream");
  35. header("Content-disposition:attachment; filename=".$zipfilename);
  36. }
  37. echo $this ->ファイルzip();
  38. }else{
  39. echo "zip エラーの作成!";
  40. }
  41. unlink($zipfilenametemp);
  42. }
  43. }
  44. //ディレクトリツリーを取得..
  45. function dirTree($directory,$rootDir){
  46. global $_SERVER,$dirInfo,$rootDir;
  47. $fileDir=$rootDir;
  48. $myDir=dir($ディレクトリ);
  49. while($file=$myDir->read()){
  50. if(is_dir("$directory/$file") and $file!="." and $file!=".."){
  51. $dirInfo[0]++;
  52. $rootDir ="$fileDir$file/";
  53. $this -> addFile('', "$rootDir");
  54. //n のフォルダーに移動します
  55. $this->dirTree("$directory/$file",$rootDir);
  56. }else{
  57. if($file!="." and $file!=".."){
  58. $dirInfo[1]++;
  59. //$fd = fopen ("$ディレクトリ/$ファイル", "r");
  60. $fileValue = file_get_contents("$ディレクトリ/$ファイル");
  61. //fclose ($fd);
  62. $this -> addFile($fileValue, "$fileDir$file");
  63. }
  64. }
  65. }
  66. $myDir->close();
  67. }
  68. 関数 unix2DosTime($unixtime = 0) {
  69. $timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
  70. if ($timearray['year'] $timearray['year'] = 1980;
  71. $timearray['mon'] = 1;
  72. $timearray['mday'] = 1;
  73. $timearray['時間'] = 0;
  74. $timearray['分'] = 0;
  75. $timearray['秒'] = 0;
  76. } // end if
  77. return (($timearray['year'] - 1980) ($timearray['hours'] > 1);
  78. }
  79. 関数 addFile($data, $name, $time = 0){
  80. $name = str_replace('//', '/', $name);
  81. $dtime = dechex($this->unix2DosTime($time));
  82. $hexdtime = '/x' 。 $dtime[6] 。 $dtime[7]
  83. . '/バツ' 。 $dtime[4] 。 $dtime[5]
  84. . '/バツ' 。 $dtime[2] 。 $dtime[3]
  85. . '/バツ' 。 $dtime[0] 。 $dtime[1];
  86. eval('$hexdtime = "' . $hexdtime . '";');
  87. $fr = "/x50/x4b/x03/x04";
  88. $fr .= "/x14/x00"; //
  89. を抽出するために必要なバージョン $fr .= "/x00/x00"; // 生成目的ビットフラグ
  90. $fr .= "/x08/x00"; // 圧縮方法
  91. $fr .= $hexdtime; // 最終更新日時
  92. // 「ローカル ファイル ヘッダー」セグメント
  93. $unc_len = strlen($data);
  94. $crc = crc32($data);
  95. $zdata = gzcompress($data);
  96. $c_len = strlen($zdata);
  97. $zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // crc バグを修正
  98. $fr .= Pack('V', $crc); // crc32
  99. $fr .= Pack('V', $c_len); // 圧縮ファイルサイズ
  100. $fr .= Pack('V', $unc_len); // 非圧縮ファイルサイズ
  101. $fr .= Pack('v', strlen($name)); // ファイル名の長さ
  102. $fr .= Pack('v', 0); // 追加のフィールド長
  103. $fr .= $name;
  104. // 「ファイルデータ」セグメント
  105. $fr .= $zdata;
  106. // 「データ記述子」セグメント (オプションですが、アーカイブがファイルとして提供されない場合は必須です)
  107. // ファイルとして機能します
  108. $fr .= Pack('V', $crc); // crc32
  109. $fr .= Pack('V', $c_len); // 圧縮ファイルサイズ
  110. $fr .= Pack('V', $unc_len); // 非圧縮ファイルサイズ
  111. // このエントリを配列に追加します
  112. $this ->データセック[] = $fr;
  113. $new_offset = strlen(implode('', $this->datasec));
  114. // 中央ディレクトリレコードに追加します
  115. $cdrec = "/x50/x4b/x01/x02";
  116. $cdrec .= "/x00/x00"; //
  117. によって作成されたバージョン $cdrec .= "/x14/x00"; //
  118. を抽出するために必要なバージョン $cdrec .= "/x00/x00"; // 生成目的ビットフラグ
  119. $cdrec .= "/x08/x00"; // 圧縮方式
  120. $cdrec .= $hexdtime; // 最終更新日時
  121. $cdrec .= Pack('V', $crc); // crc32
  122. $cdrec .= Pack('V', $c_len); // 圧縮ファイルサイズ
  123. $cdrec .= Pack('V', $unc_len); // 非圧縮ファイルサイズ
  124. $cdrec .= Pack('v', strlen($name) ); // ファイル名の長さ
  125. $cdrec .= Pack('v', 0 ); // 追加のフィールド長
  126. $cdrec .= Pack('v', 0 ); // ファイルコメントの長さ
  127. $cdrec .= Pack('v', 0 ); // ディスク番号の開始
  128. $cdrec .= Pack('v', 0 ); // 内部ファイル属性
  129. $cdrec .= Pack('V', 32 ); // 外部ファイル属性 - 'archive' ビット セット
  130. $cdrec .= Pack('V', $this -> old_offset ); // ローカルヘッダーの相対オフセット
  131. $this -> old_offset = $new_offset;
  132. $cdrec .= $name;
  133. // オプションの追加フィールド、ファイルのコメントがここに入ります
  134. // 中央ディレクトリに保存します
  135. $this -> ctrl_dir[] = $cdrec;
  136. }
  137. function filezip(){
  138. $data = implode('', $this -> datasec);
  139. $ctrldir = implode('', $this -> ctrl_dir);
  140. $data を返します。
  141. $ctrldir 。
  142. $this -> eof_ctrl_dir 。
  143. Pack('v', sizeof($this -> ctrl_dir)) 。 // 「このディスク上」のエントリの合計数
  144. Pack('v', sizeof($this -> ctrl_dir)) 。 // 全体のエントリの合計数
  145. Pack('V', strlen($ctrldir)) 。 // 中央ディレクトリのサイズ
  146. Pack('V', strlen($data)) 。 // 中央ディレクトリの先頭へのオフセット
  147. "/x00/x00"; // .zip ファイルのコメントの長さ
  148. }
  149. }
  150. ?>
  151. 他に一つの比较简单があります
  152. [php] view plaincopy
  153. class createzip
  154. {
  155. /* @圧縮されたzipファイルを作成します 将多文件压缩成一个zip文ファイルの関数
  156. * @$files 数组型 实例array("1.jpg","2.jpg");
  157. * @destination 目标文件の路径 例:"c:/androidyue.zip"
  158. * @$overwrite かどうかは上盖と目标文件と同じ文件
  159. * @Androidyue によって記録
  160. * @Blog:http://thinkblog.sinaapp. com
  161. */
  162. function create_zip($files = array(),$destination = '',$overwrite = false)
  163. {
  164. //如果zip文件已经存在并および设置は不重写返false
  165. if(file_exists($ destination) && !$overwrite) { return false; }
  166. $valid_files = array();
  167. //ファイルが渡された場合...
  168. //実際の有効なファイル名を取得します
  169. if(is_array($files)) {
  170. //各ファイルを循環します
  171. foreach($ files as $file) {
  172. //ファイルが存在することを確認します
  173. if(file_exists($file)) {
  174. $valid_files[] = $file; }
  175. }
  176. }
  177. //実際の有効なファイルが存在する場合
  178. if (count($valid_files))
  179. {
  180. // アーカイブを作成します
  181. $zip = new ZipArchive()
  182. // ファイルが既に存在する場合は上書きし、存在しない場合は作成します
  183. if($zip- >open( $destination,$overwrite ? ZIPARCHIVE::OVERWRITE : ZIPARCHIVE::CREATE) !== true) {
  184. return false; }
  185. //圧縮ファイルにファイルを追加
  186. foreach($valid_files as $file) {
  187. $zip ->addFile($file,$file);
  188. }
  189. //ファイルを閉じる
  190. $zip->close();
  191. //ファイルが存在するかどうかを確認する
  192. return file_exists($destination);
  193. }
  194. else{
  195. //実際の有効なファイルがない場合は、 false を返します
  196. }
  197. }
  198. }
  199. /****
  200. //テスト関数
  201. $files=array('temp.php','test.php');
  202. create_zip($files, 'myzipfile.zip', true);*/
  203. ?> コードをコピーします
圧縮ファイル、php

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
PHPセッションがすでに開始されているかどうかを確認するにはどうすればよいですか?PHPセッションがすでに開始されているかどうかを確認するにはどうすればよいですか?Apr 30, 2025 am 12:20 AM

PHPでは、session_status()またはsession_id()を使用して、セッションが開始されたかどうかを確認できます。 1)session_status()関数を使用します。 php_session_activeが返された場合、セッションが開始されました。 2)SESSION_ID()関数を使用します。空の文字列が返された場合、セッションが開始されます。どちらの方法でもセッション状態を効果的に確認でき、使用する方法を選択することは、PHPバージョンと個人的な好みに依存します。

Webアプリケーションでセッションを使用することが不可欠なシナリオを説明してください。Webアプリケーションでセッションを使用することが不可欠なシナリオを説明してください。Apr 30, 2025 am 12:16 AM

Sessionsionsionsarevitalinwebapplications、特にコマースプラットフォームの前。

PHPでの同時セッションアクセスをどのように管理できますか?PHPでの同時セッションアクセスをどのように管理できますか?Apr 30, 2025 am 12:11 AM

PHPでの同時セッションアクセスの管理は、次の方法で実行できます。1。データベースを使用してセッションデータを保存します。これらの方法は、データの一貫性を確保し、並行性のパフォーマンスを向上させるのに役立ちます。

PHPセッションを使用することの制限は何ですか?PHPセッションを使用することの制限は何ですか?Apr 30, 2025 am 12:04 AM

phpsessionshaveverallimitations:1)storagecconstraintscanleadtoperformanceissues; 2)securityvulnerablesliasitylikessessionfixationAttacksicexist;

負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。負荷分散がセッション管理にどのように影響し、それに対処するかを説明します。Apr 29, 2025 am 12:42 AM

負荷分散はセッション管理に影響しますが、セッションの複製、セッションの粘着性、集中セッションストレージで解決できます。 1。セッションレプリケーションサーバー間のセッションデータをコピーします。 2。セッションスティンネスは、ユーザーリクエストを同じサーバーに指示します。 3.集中セッションストレージは、Redisなどの独立したサーバーを使用してセッションデータを保存してデータ共有を確保します。

セッションロックの概念を説明します。セッションロックの概念を説明します。Apr 29, 2025 am 12:39 AM

SESSIONLOCKINGISATECHNIQUESTOESUREAUSER'SSESSIONREMAINSEXCLUSIVETOONEUSATIME.ITISCRUCIALFORPREVENTINGDATACORTIONANDSECURITYBREACHESINMULTI-USERAPPLICATIONS.SESSIONLOCKINGISISIMPLEMENTEDUSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGSINGROCKINGSMECHANISMなど

PHPセッションの選択肢はありますか?PHPセッションの選択肢はありますか?Apr 29, 2025 am 12:36 AM

PHPセッションの代替品には、Cookie、トークンベースの認証、データベースベースのセッション、Redis/Memcachedが含まれます。 1.Cookiesは、クライアントにデータを保存することによりセッションを管理します。 2.トークンベースの認証はトークンを使用してユーザーを検証します。これは非常に安全ですが、追加のロジックが必要です。 3.Databaseベースのセッションは、データベースにデータを保存します。これは、スケーラビリティが良好ですが、パフォーマンスに影響を与える可能性があります。 4. Redis/Memcachedは分散キャッシュを使用してパフォーマンスとスケーラビリティを向上させますが、追加のマッチングが必要です

PHPのコンテキストで「セッションハイジャック」という用語を定義します。PHPのコンテキストで「セッションハイジャック」という用語を定義します。Apr 29, 2025 am 12:33 AM

SessionHijackingとは、ユーザーのSessionIDを取得してユーザーになりすましている攻撃者を指します。予防方法には、次のものが含まれます。1)HTTPSを使用した通信の暗号化。 2)SessionIDのソースの検証。 3)安全なSessionID生成アルゴリズムの使用。 4)SessionIDを定期的に更新します。

See all articles

ホット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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません