source: sourcecode/application/libraries/PHPExcel/Shared/ZipArchive.php @ 1

Last change on this file since 1 was 1, checked in by dungnv, 11 years ago
File size: 5.1 KB
Line 
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    1.8.0, 2014-03-02
26 */
27
28if (!defined('PCLZIP_TEMPORARY_DIR')) {
29        define('PCLZIP_TEMPORARY_DIR', PHPExcel_Shared_File::sys_get_temp_dir());
30}
31require_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 */
41class 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}
Note: See TracBrowser for help on using the repository browser.