Просмотр файла admin_panel/libzip.dat

Размер файла: 4.83Kb
  1. <?PHP
  2. class createZip
  3. {
  4. public $compressedData = array();
  5. public $centralDirectory = array(); // central directory
  6. public $endOfCentralDirectory = "\x50\x4b\x05\x06\x00\x00\x00\x00"; //end of Central directory record
  7. public $oldOffset = 0;
  8.  
  9.  
  10. public function addDirectory($directoryName)
  11. {
  12. $directoryName = str_replace("\\", "/", $directoryName);
  13. $feedArrayRow = "\x50\x4b\x03\x04";
  14. $feedArrayRow .= "\x0a\x00";
  15. $feedArrayRow .= "\x00\x00";
  16. $feedArrayRow .= "\x00\x00";
  17. $feedArrayRow .= "\x00\x00\x00\x00";
  18. $feedArrayRow .= pack("V",0);
  19. $feedArrayRow .= pack("V",0);
  20. $feedArrayRow .= pack("V",0);
  21. $feedArrayRow .= pack("v", strlen($directoryName) );
  22. $feedArrayRow .= pack("v", 0 );
  23. $feedArrayRow .= $directoryName;
  24. $feedArrayRow .= pack("V",0);
  25. $feedArrayRow .= pack("V",0);
  26. $feedArrayRow .= pack("V",0);
  27. $this -> compressedData[] = $feedArrayRow;
  28. $newOffset = strlen(implode("", $this->compressedData));
  29. $addCentralRecord = "\x50\x4b\x01\x02";
  30. $addCentralRecord .="\x00\x00";
  31. $addCentralRecord .="\x0a\x00";
  32. $addCentralRecord .="\x00\x00";
  33. $addCentralRecord .="\x00\x00";
  34. $addCentralRecord .="\x00\x00\x00\x00";
  35. $addCentralRecord .= pack("V",0);
  36. $addCentralRecord .= pack("V",0);
  37. $addCentralRecord .= pack("V",0);
  38. $addCentralRecord .= pack("v", strlen($directoryName) );
  39. $addCentralRecord .= pack("v", 0 );
  40. $addCentralRecord .= pack("v", 0 );
  41. $addCentralRecord .= pack("v", 0 );
  42. $addCentralRecord .= pack("v", 0 );
  43. $ext = "\x00\x00\x10\x00";
  44. $ext = "\xff\xff\xff\xff";
  45. $addCentralRecord .= pack("V", 16 );
  46. $addCentralRecord .= pack("V", $this -> oldOffset );
  47. $this -> oldOffset = $newOffset;
  48. $addCentralRecord .= $directoryName;
  49. $this -> centralDirectory[] = $addCentralRecord;
  50. }
  51.  
  52.  
  53.  
  54.  
  55. public function addFile($data, $directoryName)
  56. {
  57. $directoryName = str_replace("\\", "/", $directoryName);
  58. $feedArrayRow = "\x50\x4b\x03\x04";
  59. $feedArrayRow .= "\x14\x00";
  60. $feedArrayRow .= "\x00\x00";
  61. $feedArrayRow .= "\x08\x00";
  62. $feedArrayRow .= "\x00\x00\x00\x00";
  63. $uncompressedLength = strlen($data);
  64. $compression = crc32($data);
  65. $gzCompressedData = gzcompress($data);
  66. $gzCompressedData = substr( substr($gzCompressedData, 0, strlen($gzCompressedData) - 4), 2);
  67. $compressedLength = strlen($gzCompressedData);
  68. $feedArrayRow .= pack("V",$compression);
  69. $feedArrayRow .= pack("V",$compressedLength);
  70. $feedArrayRow .= pack("V",$uncompressedLength);
  71. $feedArrayRow .= pack("v", strlen($directoryName) );
  72. $feedArrayRow .= pack("v", 0 );
  73. $feedArrayRow .= $directoryName;
  74. $feedArrayRow .= $gzCompressedData;
  75. $feedArrayRow .= pack("V",$compression);
  76. $feedArrayRow .= pack("V",$compressedLength);
  77. $feedArrayRow .= pack("V",$uncompressedLength);
  78. $this -> compressedData[] = $feedArrayRow;
  79. $newOffset = strlen(implode("", $this->compressedData));
  80. $addCentralRecord = "\x50\x4b\x01\x02";
  81. $addCentralRecord .="\x00\x00";
  82. $addCentralRecord .="\x14\x00";
  83. $addCentralRecord .="\x00\x00";
  84. $addCentralRecord .="\x08\x00";
  85. $addCentralRecord .="\x00\x00\x00\x00";
  86. $addCentralRecord .= pack("V",$compression);
  87. $addCentralRecord .= pack("V",$compressedLength);
  88. $addCentralRecord .= pack("V",$uncompressedLength);
  89. $addCentralRecord .= pack("v", strlen($directoryName) );
  90. $addCentralRecord .= pack("v", 0 );
  91. $addCentralRecord .= pack("v", 0 );
  92. $addCentralRecord .= pack("v", 0 );
  93. $addCentralRecord .= pack("v", 0 );
  94. $addCentralRecord .= pack("V", 32 );
  95. $addCentralRecord .= pack("V", $this -> oldOffset );
  96. $this -> oldOffset = $newOffset;
  97. $addCentralRecord .= $directoryName;
  98. $this -> centralDirectory[] = $addCentralRecord;
  99. }
  100.  
  101.  
  102.  
  103.  
  104. public function getZippedfile()
  105. {
  106. $data = implode("", $this -> compressedData);
  107. $controlDirectory = implode("", $this -> centralDirectory);
  108.  
  109. return
  110. $data.
  111. $controlDirectory.
  112. $this -> endOfCentralDirectory.
  113. pack("v", sizeof($this -> centralDirectory)).
  114. pack("v", sizeof($this -> centralDirectory)).
  115. pack("V", strlen($controlDirectory)).
  116. pack("V", strlen($data)).
  117. "\x00\x00";
  118. }
  119.  
  120.  
  121.  
  122.  
  123.  
  124. public function forceDownload($archiveName)
  125. {
  126. $headerInfo = '';
  127. if(ini_get('zlib.output_compression')){ini_set('zlib.output_compression', 'Off');}
  128. // Security checks
  129. if($archiveName == ""){
  130. echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> The download file was NOT SPECIFIED.</body></html>";
  131. exit;
  132. }elseif( ! file_exists( $archiveName ) ) {
  133. echo "<html><title>Public Photo Directory - Download </title><body><BR><B>ERROR:</B> File not found.</body></html>";
  134. exit;
  135. }
  136. header("Pragma: public");
  137. header("Expires: 0");
  138. header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
  139. header("Cache-Control: private",false);
  140. header("Content-Type: application/zip");
  141. header("Content-Disposition: attachment; filename=".basename($archiveName).";" );
  142. header("Content-Transfer-Encoding: binary");
  143. header("Content-Length: ".filesize($archiveName));
  144. readfile("$archiveName");
  145.  
  146. }
  147. }
  148. ?>