]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - vendor/james-heinrich/getid3/demos/demo.zip.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / james-heinrich / getid3 / demos / demo.zip.php
1 <?php
2 /////////////////////////////////////////////////////////////////
3 /// getID3() by James Heinrich <info@getid3.org>               //
4 //  available at http://getid3.sourceforge.net                 //
5 //            or http://www.getid3.org                         //
6 //          also https://github.com/JamesHeinrich/getID3       //
7 /////////////////////////////////////////////////////////////////
8 //                                                             //
9 // /demo/demo.zip.php - part of getID3()                       //
10 // Sample script how to use getID3() to decompress zip files   //
11 // See readme.txt for more details                             //
12 //                                                            ///
13 /////////////////////////////////////////////////////////////////
14
15
16 function UnzipFileContents($filename, &$errors) {
17         $errors = array();
18         $DecompressedFileContents = array();
19         if (!class_exists('getID3')) {
20                 $errors[] = 'class getID3 not defined, please include getid3.php';
21         } elseif (include_once('module.archive.zip.php')) {
22                 $getid3 = new getID3();
23                 $getid3->info['filesize'] = filesize($filename);
24                 ob_start();
25                 if ($getid3->fp = fopen($filename, 'rb')) {
26                         ob_end_clean();
27                         $getid3_zip = new getid3_zip($getid3);
28                         $getid3_zip->analyze($filename);
29                         if (($getid3->info['fileformat'] == 'zip') && !empty($getid3->info['zip']['files'])) {
30                                 if (!empty($getid3->info['zip']['central_directory'])) {
31                                         $ZipDirectoryToWalk = $getid3->info['zip']['central_directory'];
32                                 } elseif (!empty($getid3->info['zip']['entries'])) {
33                                         $ZipDirectoryToWalk = $getid3->info['zip']['entries'];
34                                 } else {
35                                         $errors[] = 'failed to parse ZIP attachment "'.$piece_filename.'" (no central directory)<br>';
36                                         fclose($getid3->fp);
37                                         return false;
38                                 }
39                                 foreach ($ZipDirectoryToWalk as $key => $valuearray) {
40                                         fseek($getid3->fp, $valuearray['entry_offset'], SEEK_SET);
41                                         $LocalFileHeader = $getid3_zip->ZIPparseLocalFileHeader($getid3->fp);
42                                         if ($LocalFileHeader['flags']['encrypted']) {
43                                                 // password-protected
44                                                 $DecompressedFileContents[$valuearray['filename']] = '';
45                                         } else {
46                                                 fseek($getid3->fp, $LocalFileHeader['data_offset'], SEEK_SET);
47                                                 $compressedFileData = '';
48                                                 while ((strlen($compressedFileData) < $LocalFileHeader['compressed_size']) && !feof($getid3->fp)) {
49                                                         $compressedFileData .= fread($getid3->fp, 32768);
50                                                 }
51                                                 switch ($LocalFileHeader['raw']['compression_method']) {
52                                                         case 0: // store - great, just copy data unchanged
53                                                                 $uncompressedFileData = $compressedFileData;
54                                                                 break;
55
56                                                         case 8: // deflate
57                                                                 ob_start();
58                                                                 $uncompressedFileData = gzinflate($compressedFileData);
59                                                                 $gzinflate_errors = trim(strip_tags(ob_get_contents()));
60                                                                 ob_end_clean();
61                                                                 if ($gzinflate_errors) {
62                                                                         $errors[] = 'gzinflate() failed for file ['.$LocalFileHeader['filename'].']: "'.$gzinflate_errors.'"';
63                                                                         continue 2;
64                                                                 }
65                                                                 break;
66
67                                                         case 1:  // shrink
68                                                         case 2:  // reduce-1
69                                                         case 3:  // reduce-2
70                                                         case 4:  // reduce-3
71                                                         case 5:  // reduce-4
72                                                         case 6:  // implode
73                                                         case 7:  // tokenize
74                                                         case 9:  // deflate64
75                                                         case 10: // PKWARE Date Compression Library Imploding
76                                                                 $DecompressedFileContents[$valuearray['filename']] = '';
77                                                                 $errors[] = 'unsupported ZIP compression method ('.$LocalFileHeader['raw']['compression_method'].' = '.$getid3_zip->ZIPcompressionMethodLookup($LocalFileHeader['raw']['compression_method']).')';
78                                                                 continue 2;
79
80                                                         default:
81                                                                 $DecompressedFileContents[$valuearray['filename']] = '';
82                                                                 $errors[] = 'unknown ZIP compression method ('.$LocalFileHeader['raw']['compression_method'].')';
83                                                                 continue 2;
84                                                 }
85                                                 $DecompressedFileContents[$valuearray['filename']] = $uncompressedFileData;
86                                                 unset($compressedFileData);
87                                         }
88                                 }
89                         } else {
90                                 $errors[] = $filename.' does not appear to be a zip file';
91                         }
92                 } else {
93                         $error_message = ob_get_contents();
94                         ob_end_clean();
95                         $errors[] = 'failed to fopen('.$filename.', rb): '.$error_message;
96                 }
97         } else {
98                 $errors[] = 'failed to include_once(module.archive.zip.php)';
99         }
100         return $DecompressedFileContents;
101 }