コード例 #1
0
ファイル: demo.zip.php プロジェクト: chenpusn/haozhixian_bak
function UnzipFileContents($filename, &$errors)
{
    $errors = array();
    $DecompressedFileContents = array();
    if (!class_exists('getID3')) {
        $errors[] = 'class getID3 not defined, please include getid3.php';
    } elseif (include_once 'module.archive.zip.php') {
        $getid3 = new getID3();
        $getid3->info['filesize'] = filesize($filename);
        ob_start();
        if ($getid3->fp = fopen($filename, 'rb')) {
            ob_end_clean();
            $getid3_zip = new getid3_zip($getid3);
            $getid3_zip->analyze($filename);
            if ($getid3->info['fileformat'] == 'zip' && !empty($getid3->info['zip']['files'])) {
                if (!empty($getid3->info['zip']['central_directory'])) {
                    $ZipDirectoryToWalk = $getid3->info['zip']['central_directory'];
                } elseif (!empty($getid3->info['zip']['entries'])) {
                    $ZipDirectoryToWalk = $getid3->info['zip']['entries'];
                } else {
                    $errors[] = 'failed to parse ZIP attachment "' . $piece_filename . '" (no central directory)<br>';
                    fclose($getid3->fp);
                    return false;
                }
                foreach ($ZipDirectoryToWalk as $key => $valuearray) {
                    fseek($getid3->fp, $valuearray['entry_offset'], SEEK_SET);
                    $LocalFileHeader = $getid3_zip->ZIPparseLocalFileHeader($getid3->fp);
                    if ($LocalFileHeader['flags']['encrypted']) {
                        // password-protected
                        $DecompressedFileContents[$valuearray['filename']] = '';
                    } else {
                        fseek($getid3->fp, $LocalFileHeader['data_offset'], SEEK_SET);
                        $compressedFileData = '';
                        while (strlen($compressedFileData) < $LocalFileHeader['compressed_size'] && !feof($getid3->fp)) {
                            $compressedFileData .= fread($getid3->fp, 32768);
                        }
                        switch ($LocalFileHeader['raw']['compression_method']) {
                            case 0:
                                // store - great, just copy data unchanged
                                $uncompressedFileData = $compressedFileData;
                                break;
                            case 8:
                                // deflate
                                ob_start();
                                $uncompressedFileData = gzinflate($compressedFileData);
                                $gzinflate_errors = trim(strip_tags(ob_get_contents()));
                                ob_end_clean();
                                if ($gzinflate_errors) {
                                    $errors[] = 'gzinflate() failed for file [' . $LocalFileHeader['filename'] . ']: "' . $gzinflate_errors . '"';
                                    continue 2;
                                }
                                break;
                            case 1:
                                // shrink
                            // shrink
                            case 2:
                                // reduce-1
                            // reduce-1
                            case 3:
                                // reduce-2
                            // reduce-2
                            case 4:
                                // reduce-3
                            // reduce-3
                            case 5:
                                // reduce-4
                            // reduce-4
                            case 6:
                                // implode
                            // implode
                            case 7:
                                // tokenize
                            // tokenize
                            case 9:
                                // deflate64
                            // deflate64
                            case 10:
                                // PKWARE Date Compression Library Imploding
                                $DecompressedFileContents[$valuearray['filename']] = '';
                                $errors[] = 'unsupported ZIP compression method (' . $LocalFileHeader['raw']['compression_method'] . ' = ' . $getid3_zip->ZIPcompressionMethodLookup($LocalFileHeader['raw']['compression_method']) . ')';
                                continue 2;
                            default:
                                $DecompressedFileContents[$valuearray['filename']] = '';
                                $errors[] = 'unknown ZIP compression method (' . $LocalFileHeader['raw']['compression_method'] . ')';
                                continue 2;
                        }
                        $DecompressedFileContents[$valuearray['filename']] = $uncompressedFileData;
                        unset($compressedFileData);
                    }
                }
            } else {
                $errors[] = $filename . ' does not appear to be a zip file';
            }
        } else {
            $error_message = ob_get_contents();
            ob_end_clean();
            $errors[] = 'failed to fopen(' . $filename . ', rb): ' . $error_message;
        }
    } else {
        $errors[] = 'failed to include_once(module.archive.zip.php)';
    }
    return $DecompressedFileContents;
}
コード例 #2
0
 public static function CreateDeepArray($array_path, $separator, $value)
 {
     // assigns $value to a nested array path:
     //   $foo = getid3_lib::CreateDeepArray('/path/to/my', '/', 'file.txt')
     // is the same as:
     //   $foo = array ('path'=>array('to'=>'array('my'=>array('file.txt'))));
     // or
     //   $foo['path']['to']['my'] = 'file.txt';
     while ($array_path[0] == $separator) {
         $array_path = substr($array_path, 1);
     }
     if (($pos = strpos($array_path, $separator)) !== false) {
         return array(substr($array_path, 0, $pos) => getid3_zip::CreateDeepArray(substr($array_path, $pos + 1), $separator, $value));
     }
     return array($array_path => $value);
 }
コード例 #3
0
ファイル: demo.zip.php プロジェクト: ratacibernetica/GetId3
function UnzipFileContents($filename, &$errors)
{
    $errors = array();
    $DecompressedFileContents = array();
    if (include_once 'getid3.module.archive.zip.php') {
        ob_start();
        if ($fp_ziptemp = fopen($filename, 'rb')) {
            ob_end_clean();
            $ThisFileInfo['filesize'] = filesize($filename);
            $getid3_zip = new getid3_zip($fp_ziptemp, $ThisFileInfo);
            if ($ThisFileInfo['fileformat'] == 'zip' && !empty($ThisFileInfo['zip']['files'])) {
                if (!empty($ThisFileInfo['zip']['central_directory'])) {
                    $ZipDirectoryToWalk = $ThisFileInfo['zip']['central_directory'];
                } elseif (!empty($ThisFileInfo['zip']['entries'])) {
                    $ZipDirectoryToWalk = $ThisFileInfo['zip']['entries'];
                } else {
                    $errors[] = 'failed to parse ZIP attachment "' . $piece_filename . '" (no central directory)<br>';
                    fclose($fp_ziptemp);
                    return false;
                }
                foreach ($ZipDirectoryToWalk as $key => $valuearray) {
                    fseek($fp_ziptemp, $valuearray['entry_offset'], SEEK_SET);
                    $LocalFileHeader = $getid3_zip->ZIPparseLocalFileHeader($fp_ziptemp);
                    if ($LocalFileHeader['flags']['encrypted']) {
                        // password-protected
                        $DecompressedFileContents[$valuearray['filename']] = '';
                    } else {
                        fseek($fp_ziptemp, $LocalFileHeader['data_offset'], SEEK_SET);
                        $compressedFileData = '';
                        while (strlen($compressedFileData) < $LocalFileHeader['compressed_size'] && !feof($fp_ziptemp)) {
                            $compressedFileData .= fread($fp_ziptemp, 32768);
                        }
                        switch ($LocalFileHeader['raw']['compression_method']) {
                            case 0:
                                // store - great, do nothing at all
                                $uncompressedFileData = $compressedFileData;
                                break;
                            case 8:
                                ob_start();
                                $uncompressedFileData = gzinflate($compressedFileData);
                                $gzinflate_errors = ob_get_contents();
                                ob_end_clean();
                                if ($gzinflate_errors) {
                                    $errors[] = 'gzinflate() failed: "' . trim($gzinflate_errors) . '"';
                                    continue 2;
                                }
                                break;
                            default:
                                $DecompressedFileContents[$valuearray['filename']] = '';
                                $errors[] = 'unknown ZIP compression method (' . $LocalFileHeader['raw']['compression_method'] . ')';
                                continue 2;
                        }
                        $DecompressedFileContents[$valuearray['filename']] = $uncompressedFileData;
                        unset($compressedFileData);
                    }
                }
            } else {
                $errors[] = $filename . ' does not appear to be a zip file';
            }
        } else {
            $error_message = ob_get_contents();
            ob_end_clean();
            $errors[] = 'failed to fopen(' . $filename . ', rb): ' . $error_message;
        }
    } else {
        $errors[] = 'failed to include_once(getid3.module.archive.zip.php)';
    }
    return $DecompressedFileContents;
}