[ Index ]

PHP Cross Reference of moodle-2.8

title

Body

[close]

/lib/phpexcel/PHPExcel/Shared/ -> ZipArchive.php (source)

   1  <?php
   2  /**
   3   * PHPExcel
   4   *
   5   * Copyright (c) 2006 - 2014 PHPExcel
   6   *
   7   * This library is free software; you can redistribute it and/or
   8   * modify it under the terms of the GNU Lesser General Public
   9   * License as published by the Free Software Foundation; either
  10   * version 2.1 of the License, or (at your option) any later version.
  11   *
  12   * This library is distributed in the hope that it will be useful,
  13   * but WITHOUT ANY WARRANTY; without even the implied warranty of
  14   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15   * Lesser General Public License for more details.
  16   *
  17   * You should have received a copy of the GNU Lesser General Public
  18   * License along with this library; if not, write to the Free Software
  19   * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
  20   *
  21   * @category   PHPExcel
  22   * @package    PHPExcel_Shared_ZipArchive
  23   * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
  24   * @license    http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt    LGPL
  25   * @version    ##VERSION##, ##DATE##
  26   */
  27  
  28  if (!defined('PCLZIP_TEMPORARY_DIR')) {
  29      define('PCLZIP_TEMPORARY_DIR', PHPExcel_Shared_File::sys_get_temp_dir());
  30  }
  31  require_once PHPEXCEL_ROOT . 'PHPExcel/Shared/PCLZip/pclzip.lib.php';
  32  
  33  
  34  /**
  35   * PHPExcel_Shared_ZipArchive
  36   *
  37   * @category   PHPExcel
  38   * @package    PHPExcel_Shared_ZipArchive
  39   * @copyright  Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
  40   */
  41  class PHPExcel_Shared_ZipArchive
  42  {
  43  
  44      /**    constants */
  45      const OVERWRITE        = 'OVERWRITE';
  46      const CREATE        = 'CREATE';
  47  
  48  
  49      /**
  50       * Temporary storage directory
  51       *
  52       * @var string
  53       */
  54      private $_tempDir;
  55  
  56      /**
  57       * Zip Archive Stream Handle
  58       *
  59       * @var string
  60       */
  61      private $_zip;
  62  
  63  
  64      /**
  65       * Open a new zip archive
  66       *
  67       * @param    string    $fileName    Filename for the zip archive
  68       * @return    boolean
  69       */
  70  	public function open($fileName)
  71      {
  72          $this->_tempDir = PHPExcel_Shared_File::sys_get_temp_dir();
  73  
  74          $this->_zip = new PclZip($fileName);
  75  
  76          return true;
  77      }
  78  
  79  
  80      /**
  81       * Close this zip archive
  82       *
  83       */
  84  	public function close()
  85      {
  86      }
  87  
  88  
  89      /**
  90       * Add a new file to the zip archive from a string of raw data.
  91       *
  92       * @param    string    $localname        Directory/Name of the file to add to the zip archive
  93       * @param    string    $contents        String of data to add to the zip archive
  94       */
  95  	public function addFromString($localname, $contents)
  96      {
  97          $filenameParts = pathinfo($localname);
  98  
  99          $handle = fopen($this->_tempDir.'/'.$filenameParts["basename"], "wb");
 100          fwrite($handle, $contents);
 101          fclose($handle);
 102  
 103          $res = $this->_zip->add($this->_tempDir.'/'.$filenameParts["basename"],
 104                                  PCLZIP_OPT_REMOVE_PATH, $this->_tempDir,
 105                                  PCLZIP_OPT_ADD_PATH, $filenameParts["dirname"]
 106                                 );
 107          if ($res == 0) {
 108              throw new PHPExcel_Writer_Exception("Error zipping files : " . $this->_zip->errorInfo(true));
 109          }
 110  
 111          unlink($this->_tempDir.'/'.$filenameParts["basename"]);
 112      }
 113  
 114      /**
 115       * Find if given fileName exist in archive (Emulate ZipArchive locateName())
 116       *
 117       * @param        string        $fileName        Filename for the file in zip archive
 118       * @return        boolean
 119       */
 120      public function locateName($fileName)
 121      {
 122          $list = $this->_zip->listContent();
 123          $listCount = count($list);
 124          $list_index = -1;
 125          for ($i = 0; $i < $listCount; ++$i) {
 126              if (strtolower($list[$i]["filename"]) == strtolower($fileName) ||
 127                  strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) {
 128                  $list_index = $i;
 129                  break;
 130              }
 131          }
 132          return ($list_index > -1);
 133      }
 134  
 135      /**
 136       * Extract file from archive by given fileName (Emulate ZipArchive getFromName())
 137       *
 138       * @param        string        $fileName        Filename for the file in zip archive
 139       * @return        string  $contents        File string contents
 140       */
 141      public function getFromName($fileName) 
 142      {
 143          $list = $this->_zip->listContent();
 144          $listCount = count($list);
 145          $list_index = -1;
 146          for ($i = 0; $i < $listCount; ++$i) {
 147              if (strtolower($list[$i]["filename"]) == strtolower($fileName) ||
 148                  strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) {
 149                  $list_index = $i;
 150                  break;
 151              }
 152          }
 153  
 154          $extracted = "";
 155          if ($list_index != -1) {
 156              $extracted = $this->_zip->extractByIndex($list_index, PCLZIP_OPT_EXTRACT_AS_STRING);
 157          } else {
 158              $filename = substr($fileName, 1);
 159              $list_index = -1;
 160              for ($i = 0; $i < $listCount; ++$i) {
 161                  if (strtolower($list[$i]["filename"]) == strtolower($fileName) || 
 162                      strtolower($list[$i]["stored_filename"]) == strtolower($fileName)) {
 163                      $list_index = $i;
 164                      break;
 165                  }
 166              }
 167              $extracted = $this->_zip->extractByIndex($list_index, PCLZIP_OPT_EXTRACT_AS_STRING);
 168          }
 169          if ((is_array($extracted)) && ($extracted != 0)) {
 170              $contents = $extracted[0]["content"];
 171          }
 172  
 173          return $contents;
 174      }
 175  }


Generated: Fri Nov 28 20:29:05 2014 Cross-referenced by PHPXref 0.7.1