Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00019 final class InfoZipArchive extends FileArchive
00020 {
00021 private $zipArchive = null;
00022
00023 public function __construct($cmdBinPath = '/usr/bin/unzip')
00024 {
00025 $usingCmd = $cmdBinPath;
00026
00027 if (class_exists('ZipArchive', false)) {
00028
00029 $this->zipArchive = new ZipArchive();
00030 $usingCmd = null;
00031
00032 } elseif ($usingCmd === null)
00033 throw
00034 new UnsupportedMethodException(
00035 'no built-in support for zip'
00036 );
00037
00038 parent::__construct($usingCmd);
00039 }
00040
00041 public function open($sourceFile)
00042 {
00043 parent::open($sourceFile);
00044
00045 if ($this->zipArchive) {
00046 $resultCode = $this->zipArchive->open($sourceFile);
00047
00048 if ($resultCode !== true)
00049 throw new ArchiverException(
00050 'ZipArchive::open() returns error code == '.$resultCode
00051 );
00052 }
00053
00054 return $this;
00055 }
00056
00057 public function readFile($fileName)
00058 {
00059 if (!$this->sourceFile)
00060 throw
00061 new WrongStateException(
00062 'dude, open an archive first.'
00063 );
00064
00065 if ($this->zipArchive) {
00066 $result = $this->zipArchive->getFromName($fileName);
00067
00068 if ($result === false)
00069 throw new ArchiverException(
00070 'ZipArchive::getFromName() failed'
00071 );
00072
00073 return $result;
00074 }
00075
00076 $options = '-c -q'
00077 .' '.escapeshellarg($this->sourceFile)
00078 .' '.escapeshellarg($fileName);
00079
00080 return $this->execStdoutOptions($options);
00081 }
00082 }
00083 ?>