public function read_file_docx($filename) { $striped_content = ''; $content = ''; if (!$filename || !file_exists($filename)) { return false; } $zip = zip_open($filename); if (!$zip || is_numeric($zip)) { return false; } while ($zip_entry = zip_read($zip)) { if (zip_entry_open($zip, $zip_entry) == FALSE) { continue; } if (zip_entry_name($zip_entry) != "word/document.xml") { continue; } $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } // end while zip_close($zip); //echo $content; //echo "<hr>"; //file_put_contents('1.xml', $content); $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content); $content = str_replace('</w:r></w:p>', "\r\n", $content); $striped_content = strip_tags($content); return $striped_content; }
public function odt_unzip($file, $save = false) { if (!function_exists('zip_open')) { die('NO ZIP FUNCTIONS DETECTED. Do you have the PECL ZIP extensions loaded?'); } if ($zip = zip_open($file)) { while ($zip_entry = zip_read($zip)) { $filename = zip_entry_name($zip_entry); if (zip_entry_name($zip_entry) == 'content.xml' and zip_entry_open($zip, $zip_entry, "r")) { $content = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } if (preg_match('Pictures/', $filename) and !preg_match('Object', $filename) and zip_entry_open($zip, $zip_entry, "r")) { $img[$filename] = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } } if (isset($content)) { if ($save == false) { return array($content, $img); } else { file_put_contents('content.xml', $content); if (is_array($img)) { if (!is_dir('Pictures')) { mkdir('Pictures'); } foreach ($img as $key => $val) { file_put_contents($key, $val); } } } } } }
function unzip($file, $dir = 'unzip/') { if (!file_exists($dir)) { mkdir($dir, 0777); } $zip_handle = zip_open($file); if (is_resource($zip_handle)) { while ($zip_entry = zip_read($zip_handle)) { if ($zip_entry) { $zip_name = zip_entry_name($zip_entry); $zip_size = zip_entry_filesize($zip_entry); if ($zip_size == 0 && $zip_name[strlen($zip_name) - 1] == '/') { mkdir($dir . $zip_name, 0775); } else { @zip_entry_open($zip_handle, $zip_entry, 'r'); $fp = @fopen($dir . $zip_name, 'wb+'); @fwrite($fp, zip_entry_read($zip_entry, $zip_size), $zip_size); @fclose($fp); @chmod($dir . $zip_name, 0775); @zip_entry_close($zip_entry); } } } return true; } else { zip_close($zip_handle); return false; } }
function unzip($zipfile) { $zip = zip_open($zipfile); while ($zip_entry = zip_read($zip)) { zip_entry_open($zip, $zip_entry); if (substr(zip_entry_name($zip_entry), -1) == '/') { $zdir = substr(zip_entry_name($zip_entry), 0, -1); if (file_exists($zdir)) { trigger_error('Directory "<b>' . $zdir . '</b>" exists', E_USER_ERROR); return false; } mkdir($zdir); } else { $name = zip_entry_name($zip_entry); if (file_exists($name)) { trigger_error('File "<b>' . $name . '</b>" exists', E_USER_ERROR); return false; } $fopen = fopen($name, "w"); fwrite($fopen, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)), zip_entry_filesize($zip_entry)); } zip_entry_close($zip_entry); } zip_close($zip); return true; }
function caching($comics_id, $zip_path, $image_ext) { $comic = zip_open($zip_path); if (!is_resource($comic)) { die("[ERR]ZIP_OPEN : " . $zip_path); } $inzip_path = ""; $count = 0; $files = null; $db = new SQLite3(DB); $db->exec("BEGIN DEFERRED;"); while (($entry = zip_read($comic)) !== false) { $inzip_path = zip_entry_name($entry); $cache_name = md5($zip_path . "/" . $inzip_path) . '.' . get_ext($inzip_path); // 画像か否か if (!is_image($inzip_path, $image_ext)) { continue; } $data = zip_entry_read($entry, zip_entry_filesize($entry)); $filepath = CACHE . '/' . $cache_name; file_put_contents($filepath, $data); $count++; query("INSERT INTO images (comics_id, page, filepath) VALUES (" . $comics_id . ", " . $count . ", '" . $filepath . "')", $db); } zip_close($comic); query("UPDATE comics SET pages = " . $count . " WHERE id = " . $comics_id, $db); $db->exec("COMMIT;"); }
public static function parse($filename) { $striped_content = ''; $content = ''; if (!$filename || !file_exists($filename)) { return false; } $zip = zip_open($filename); if (!$zip || is_numeric($zip)) { return false; } while ($zip_entry = zip_read($zip)) { if (zip_entry_open($zip, $zip_entry) == FALSE) { continue; } if (zip_entry_name($zip_entry) != "content.xml") { continue; } $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } zip_close($zip); $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content); $content = str_replace('</w:r></w:p>', "\r\n", $content); $striped_content = strip_tags($content); return $striped_content; }
/** * This action handles import action. * * It must be reached by a POST request. * * Parameter is: * - file (default: nothing!) * Available file types are: zip, json or xml. */ public function importAction() { if (!Minz_Request::isPost()) { Minz_Request::forward(array('c' => 'importExport', 'a' => 'index'), true); } $file = $_FILES['file']; $status_file = $file['error']; if ($status_file !== 0) { Minz_Log::error('File cannot be uploaded. Error code: ' . $status_file); Minz_Request::bad(_t('feedback.import_export.file_cannot_be_uploaded'), array('c' => 'importExport', 'a' => 'index')); } @set_time_limit(300); $type_file = $this->guessFileType($file['name']); $list_files = array('opml' => array(), 'json_starred' => array(), 'json_feed' => array()); // We try to list all files according to their type $list = array(); if ($type_file === 'zip' && extension_loaded('zip')) { $zip = zip_open($file['tmp_name']); if (!is_resource($zip)) { // zip_open cannot open file: something is wrong Minz_Log::error('Zip archive cannot be imported. Error code: ' . $zip); Minz_Request::bad(_t('feedback.import_export.zip_error'), array('c' => 'importExport', 'a' => 'index')); } while (($zipfile = zip_read($zip)) !== false) { if (!is_resource($zipfile)) { // zip_entry() can also return an error code! Minz_Log::error('Zip file cannot be imported. Error code: ' . $zipfile); } else { $type_zipfile = $this->guessFileType(zip_entry_name($zipfile)); if ($type_file !== 'unknown') { $list_files[$type_zipfile][] = zip_entry_read($zipfile, zip_entry_filesize($zipfile)); } } } zip_close($zip); } elseif ($type_file === 'zip') { // Zip extension is not loaded Minz_Request::bad(_t('feedback.import_export.no_zip_extension'), array('c' => 'importExport', 'a' => 'index')); } elseif ($type_file !== 'unknown') { $list_files[$type_file][] = file_get_contents($file['tmp_name']); } // Import file contents. // OPML first(so categories and feeds are imported) // Starred articles then so the "favourite" status is already set // And finally all other files. $error = false; foreach ($list_files['opml'] as $opml_file) { $error = $this->importOpml($opml_file); } foreach ($list_files['json_starred'] as $article_file) { $error = $this->importJson($article_file, true); } foreach ($list_files['json_feed'] as $article_file) { $error = $this->importJson($article_file); } // And finally, we get import status and redirect to the home page Minz_Session::_param('actualize_feeds', true); $content_notif = $error === true ? _t('feedback.import_export.feeds_imported_with_errors') : _t('feedback.import_export.feeds_imported'); Minz_Request::good($content_notif); }
private function read_docx() { $striped_content = ''; $content = ''; $zip = zip_open($this->filename); if (!$zip || is_numeric($zip)) { return false; } while ($zip_entry = zip_read($zip)) { if (zip_entry_open($zip, $zip_entry) == FALSE) { continue; } if (zip_entry_name($zip_entry) != "word/document.xml") { continue; } $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } // end while zip_close($zip); $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content); $content = str_replace('</w:r></w:p>', "\r\n", $content); $striped_content = strip_tags($content); return $striped_content; }
function getLayoutData($layout, $fileName, $usage, $install = false) { $output = ""; $zip = zip_open(($install == false ? 'layouts/' : '../layouts/') . $layout . '.zip'); if ($zip) { while ($zip_entry = zip_read($zip)) { $file = basename(zip_entry_name($zip_entry)); if (zip_entry_open($zip, $zip_entry, 'r')) { if ($usage == "include" && strpos($file, $fileName) !== FALSE) { $output = 'phar://layouts/' . $layout . '.zip/' . zip_entry_name($zip_entry); } if ($usage == "echo") { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); if (strpos(strval($file), strval($fileName)) !== FALSE) { if (strpos($file, 'settings') !== FALSE) { $output = json_decode($buf, true); } else { $output = $buf; } } } } } zip_close($zip); } return $output; }
function unpackZip($file, $dir) { if ($zip = zip_open(getcwd() . $file)) { if ($zip) { while ($zip_entry = zip_read($zip)) { if (zip_entry_open($zip, $zip_entry, "r")) { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); $dir_name = dirname(zip_entry_name($zip_entry)); if ($dir_name == "." || !is_dir($dir_name)) { $dir_op = $dir; foreach (explode("/", $dir_name) as $k) { $dir_op = $dir_op . $k; if (is_file($dir_op)) { unlink($dir_op); } if (!is_dir($dir_op)) { mkdir($dir_op); } $dir_op = $dir_op . "/"; } } $fp = fopen($dir . zip_entry_name($zip_entry), "w"); fwrite($fp, $buf); zip_entry_close($zip_entry); } else { return false; } } zip_close($zip); } } else { return false; } return true; }
public static function unzip($file, $dir) { $zip = new ZipArchive(); $zip->open($file); $zip->extractTo($dir); return; $zip = zip_open($file); if (!is_resource($zip)) { return $zip; } while ($zipEntry = zip_read($zip)) { $name = zip_entry_name($zipEntry); $size = zip_entry_filesize($zipEntry); $data = zip_entry_read($zipEntry, $size); if (substr($name, -1, 1) == "/") { if (!is_dir($dir . "/" . $name)) { mkdir($dir . "/" . $name); } } else { $filename = $dir . "/" . $name; if (!is_file($filename) || md5(file_get_contents($filename)) != md5($data)) { file_put_contents($filename, $data); } } } return true; }
function unpackInto($file_path, $dir_path) { $zip = zip_open($file_path); if (!is_dir($dir_path)) { throw new Exception($dir_path . ' should be a directory but isn\'t.'); } if ($zip) { while ($zip_entry = zip_read($zip)) { zip_entry_open($zip, $zip_entry); if (substr(zip_entry_name($zip_entry), -1) == '/') { //this $zip_entry is a directory. create it. $zdir = substr(zip_entry_name($zip_entry), 0, -1); mkdir($dir_path . '/' . $zdir); } else { $file = basename(zip_entry_name($zip_entry)); $fp = fopen($dir_path . '/' . zip_entry_name($zip_entry), "w+"); //echo zip_entry_name($zip_entry); if (zip_entry_open($zip, $zip_entry, "r")) { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } fwrite($fp, $buf); fclose($fp); } } zip_close($zip); } }
static function unpack($archive, $out_folder, $file_name = '') { $zip = zip_open($archive); while ($zip_entry = zip_read($zip)) { $zip_entry_name = zip_entry_name($zip_entry); if ($zip_entry_name != '.DS_Store') { $zip_entry_size = zip_entry_filesize($zip_entry); if ($zip_entry_size == 0) { if (!file_exists($out_folder . $zip_entry_name) && !@mkdir($out_folder . $zip_entry_name)) { throw new Exception('Can not create folder <strong>' . $out_folder . $zip_entry_name . '</strong>. Permissions denied.'); } } else { if (!$file_name || $out_folder . $zip_entry_name == $file_name) { if (!@file_put_contents($out_folder . $zip_entry_name, zip_entry_read($zip_entry, $zip_entry_size))) { throw new Exception('Can not unpack file <strong>' . $out_folder . $zip_entry_name . '</strong>. Permissions denied.'); } if ($file_name) { break; } } } } } zip_close($zip); }
function unzip($file) { $zip = zip_open($file); if (is_resource($zip)) { $tree = ""; while (($zip_entry = zip_read($zip)) !== false) { echo "Unpacking " . zip_entry_name($zip_entry) . "\n"; if (strpos(zip_entry_name($zip_entry), DIRECTORY_SEPARATOR) !== false) { $last = strrpos(zip_entry_name($zip_entry), DIRECTORY_SEPARATOR); $dir = substr(zip_entry_name($zip_entry), 0, $last); $file = substr(zip_entry_name($zip_entry), strrpos(zip_entry_name($zip_entry), DIRECTORY_SEPARATOR) + 1); if (!is_dir($dir)) { @mkdir($dir, 0755, true) or die("Unable to create {$dir}\n"); } if (strlen(trim($file)) > 0) { $return = @file_put_contents($dir . "/" . $file, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); if ($return === false) { die("Unable to write file {$dir}/{$file}\n"); } } } else { file_put_contents($file, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); } } } else { echo "Unable to open zip file\n"; } }
/** * APP版本更新接口 * @date: 2016年1月10日 下午9:30:33 * * @author : Elliot * @param * : none * @return : */ public function version_get() { $dir = 'data'; $dh = @opendir($dir); $return = array(); while ($file = @readdir($dh)) { // 循环读取目录下的文件 if ($file != '.' and $file != '..') { $path = $dir . DIRECTORY_SEPARATOR . $file; // 设置目录,用于含有子目录的情况 if (is_file($path)) { $filetime[] = date("Y-m-d H:i:s", filemtime($path)); // 获取文件最近修改日期 $return[] = $dir . DIRECTORY_SEPARATOR . $file; } } } @closedir($dh); // 关闭目录流 array_multisort($filetime, SORT_DESC, SORT_STRING, $return); // 按时间排序 $file = current($return); $zip = zip_open($file); if ($zip) { while ($zip_entry = zip_read($zip)) { if (zip_entry_name($zip_entry) == self::INSTALLPACKETVERSIONFILE && zip_entry_open($zip, $zip_entry, "r")) { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } } zip_close($zip); } $result = array('version' => $buf, 'url' => 'http://' . $_SERVER['SERVER_NAME'] . DIRECTORY_SEPARATOR . $file); $this->response($result, 200); }
public function unzip($file) { $zip = zip_open(realpath(".") . "/" . $file); if (!$zip) { return "Unable to proccess file '{$file}'"; } $e = ''; while ($zip_entry = zip_read($zip)) { $zdir = dirname(zip_entry_name($zip_entry)); $zname = zip_entry_name($zip_entry); if (!zip_entry_open($zip, $zip_entry, "r")) { $e .= "Unable to proccess file '{$zname}'"; continue; } if (!is_dir($zdir)) { mkdirr($zdir, 0777); } #print "{$zdir} | {$zname} \n"; $zip_fs = zip_entry_filesize($zip_entry); if (empty($zip_fs)) { continue; } $zz = zip_entry_read($zip_entry, $zip_fs); $z = fopen($zname, "w"); fwrite($z, $zz); fclose($z); zip_entry_close($zip_entry); } zip_close($zip); return $e; }
function load_sheet($sheet_index) { $this->zip = zip_open($this->xlsx); if ($this->zip) { while ($zip_entry = zip_read($this->zip)) { if (zip_entry_name($zip_entry) == 'xl/worksheets/sheet' . $sheet_index . '.xml') { // 실제 로드되는 파일 if (zip_entry_open($this->zip, $zip_entry, "r")) { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); $arr = simplexml_load_string($buf); $this->rows =& $arr->sheetData->row; $this->rowsize = sizeof($this->rows); // dimension 을 파싱해서 써도 되지만 구찬아서.; if ($this->rowsize > 0) { $this->colsize = (int) array_pop(explode(":", (string) $this->rows[0]['spans'])); // 1:7 이런식으로 값이 들어있음. } else { $this->colsize = 0; } zip_entry_close($zip_entry); } // if } } // while } // if this zip }
function extract_zip($zipfile, $dir) { if (function_exists('zip_open')) { $zip = zip_open($zipfile); if ($zip) { while ($zip_entry = zip_read($zip)) { if (zip_entry_filesize($zip_entry) > 0) { if (zip_entry_open($zip, $zip_entry, "r")) { $buf = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); file_put($dir . '/' . zip_entry_name($zip_entry), $buf); } } else { dir_create($dir . '/' . zip_entry_name($zip_entry)); } } zip_close($zip); } } else { $array = $this->list_zip($zipfile); $count = count($array); $f = 0; $d = 0; for ($i = 0; $i < $count; $i++) { if ($array[$i]['folder'] == 0) { if ($this->extract_file($zipfile, $dir, $i) > 0) { $f++; } } else { $d++; } } } return true; }
public static function ExtractEntry($zip, $entry) { zip_entry_open($zip, $entry); $data = zip_entry_read($entry, zip_entry_filesize($entry)); zip_entry_close($entry); return $data; }
public function getFile($name) { $this->_open(); $contents = ''; while ($e = zip_read($this->zh)) { if (zip_entry_name($e) == $name) { if (zip_entry_open($this->zh, $e)) { $size = zip_entry_filesize($e); while ($data = zip_entry_read($e, $size)) { $contents .= $data; } } } } /* $e = $this->handles[$name]; if(zip_entry_open($this->zh, $e)) { $size = zip_entry_filesize($e); while($data = zip_entry_read($e,$size)) { $contents .= $data; } } else { $this->log('could not open'); } */ $this->_close(); return $contents; }
/** * les deux fonction suivante ont été récupéré dans les exemples de php.net puis adapté pour leed. * * Unzip the source_file in the destination dir * * @param string The path to the ZIP-file. * @param string The path where the zipfile should be unpacked, if false the directory of the zip-file is used * @param boolean Indicates if the files will be unpacked in a directory with the name of the zip-file (true) or not (false) (only if the destination directory is set to false!) * @param boolean Overwrite existing files (true) or not (false) * * @return boolean Succesful or not */ function unzip_leed($src_file, $dest_dir = false, $create_zip_name_dir = true, $overwrite = true) { if ($zip = zip_open($src_file)) { if ($zip) { $splitter = $create_zip_name_dir === true ? "." : "/"; if ($dest_dir === false) { $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter)) . "/"; } // Create the directories to the destination dir if they don't already exist create_dirs($dest_dir); // For every file in the zip-packet while ($zip_entry = zip_read($zip)) { // Now we're going to create the directories in the destination directories // If the file is not in the root dir $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/"); if ($pos_last_slash !== false) { // Create the directory where the zip-entry should be saved (with a "/" at the end) $interne_dir = str_replace("Leed-master/", "", substr(zip_entry_name($zip_entry), 0, $pos_last_slash + 1)); $interne_dir = str_replace("Leed-multi_user/", "", $interne_dir); $interne_dir = str_replace("Leed-market-master/", "", $interne_dir); $interne_dir = str_replace("Leed-market-multi_user/", "", $interne_dir); $interne_dir = str_replace("Leed-dev/", "", $interne_dir); create_dirs($dest_dir . $interne_dir); } // Open the entry if (zip_entry_open($zip, $zip_entry, "r")) { // The name of the file to save on the disk $file_name = $dest_dir . zip_entry_name($zip_entry); // Check if the files should be overwritten or not if ($overwrite === true || $overwrite === false && !is_file($file_name)) { // Get the content of the zip entry $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); $file_name = str_replace("Leed-master/", "", $file_name); $file_name = str_replace("Leed-multi_user/", "", $file_name); $file_name = str_replace("Leed-market-master/", "", $file_name); $file_name = str_replace("Leed-market-multi_user/", "", $file_name); $file_name = str_replace("Leed-dev/", "", $file_name); if (is_dir($file_name)) { echo "répertoire: " . $file_name . "<br />"; } else { if (file_put_contents($file_name, $fstream) === false) { echo "erreur copie: " . $file_name . "<br />"; } else { echo "copie: " . $file_name . "<br />"; } } } // Close the entry zip_entry_close($zip_entry); } } // Close the zip-file zip_close($zip); } } else { return false; } return true; }
/** * Unzip the source_file in the destination dir * * @param string The path to the ZIP-file. * @param string The path where the zipfile should be unpacked, if false the directory of the zip-file is used * @param boolean Indicates if the files will be unpacked in a directory with the name of the zip-file (true) or not (false) (only if the destination directory is set to false!) * @param boolean Overwrite existing files (true) or not (false) * * @return boolean Succesful or not */ function unzip($src_file, $dest_dir = false, $create_zip_name_dir = true, $overwrite = true) { if (function_exists("zip_open")) { if (!is_resource(zip_open($src_file))) { $src_file = dirname($_SERVER['SCRIPT_FILENAME']) . "/" . $src_file; } if (is_resource($zip = zip_open($src_file))) { $splitter = $create_zip_name_dir === true ? "." : "/"; if ($dest_dir === false) { $dest_dir = substr($src_file, 0, strrpos($src_file, $splitter)) . "/"; } // Create the directories to the destination dir if they don't already exist $this->create_dirs($dest_dir); // For every file in the zip-packet while ($zip_entry = zip_read($zip)) { // Now we're going to create the directories in the destination directories // If the file is not in the root dir $pos_last_slash = strrpos(zip_entry_name($zip_entry), "/"); if ($pos_last_slash !== false) { // Create the directory where the zip-entry should be saved (with a "/" at the end) $this->create_dirs($dest_dir . substr(zip_entry_name($zip_entry), 0, $pos_last_slash + 1)); } // Open the entry if (zip_entry_open($zip, $zip_entry, "r")) { // The name of the file to save on the disk $file_name = $dest_dir . zip_entry_name($zip_entry); // Check if the files should be overwritten or not if ($overwrite === true || $overwrite === false && !is_file($file_name)) { // Get the content of the zip entry $fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); if (!is_dir($file_name)) { file_put_contents($file_name, $fstream); } // Set the rights if (file_exists($file_name)) { chmod($file_name, 0777); echo "<span style=\"color:#1da319;\">file saved: </span>" . $file_name . "<br />"; } else { echo "<span style=\"color:red;\">file not found: </span>" . $file_name . "<br />"; } } // Close the entry zip_entry_close($zip_entry); } } // Close the zip-file zip_close($zip); } else { echo "No Zip Archive Found."; return false; } return true; } else { if (version_compare(phpversion(), "5.2.0", "<")) { $infoVersion = "(use PHP 5.2.0 or later)"; } echo "You need to install/enable the php_zip.dll extension {$infoVersion}"; } }
/** * Gets zip file contents * * @param string $file zip file * @param string $specific_entry regular expression to match a file * * @return array ($error_message, $file_data); $error_message * is empty if no error */ function PMA_getZipContents($file, $specific_entry = null) { $error_message = ''; $file_data = ''; $zip_handle = zip_open($file); if (!is_resource($zip_handle)) { $error_message = __('Error in ZIP archive:') . ' ' . PMA_getZipError($zip_handle); zip_close($zip_handle); return array('error' => $error_message, 'data' => $file_data); } $first_zip_entry = zip_read($zip_handle); if (false === $first_zip_entry) { $error_message = __('No files found inside ZIP archive!'); zip_close($zip_handle); return array('error' => $error_message, 'data' => $file_data); } /* Is the the zip really an ODS file? */ $read = zip_entry_read($first_zip_entry); $ods_mime = 'application/vnd.oasis.opendocument.spreadsheet'; if (!strcmp($ods_mime, $read)) { $specific_entry = '/^content\\.xml$/'; } if (!isset($specific_entry)) { zip_entry_open($zip_handle, $first_zip_entry, 'r'); /* File pointer has already been moved, * so include what was read above */ $file_data = $read; $file_data .= zip_entry_read($first_zip_entry, zip_entry_filesize($first_zip_entry)); zip_entry_close($first_zip_entry); zip_close($zip_handle); return array('error' => $error_message, 'data' => $file_data); } /* Return the correct contents, not just the first entry */ for (;;) { $entry = zip_read($zip_handle); if (is_resource($entry)) { if (preg_match($specific_entry, zip_entry_name($entry))) { zip_entry_open($zip_handle, $entry, 'r'); $file_data = zip_entry_read($entry, zip_entry_filesize($entry)); zip_entry_close($entry); break; } } else { /** * Either we have reached the end of the zip and still * haven't found $specific_entry or there was a parsing * error that we must display */ if ($entry === false) { $error_message = __('Error in ZIP archive:') . ' Could not find "' . $specific_entry . '"'; } else { $error_message = __('Error in ZIP archive:') . ' ' . PMA_getZipError($zip_handle); } break; } } zip_close($zip_handle); return array('error' => $error_message, 'data' => $file_data); }
function upload_article_handler(&$request, &$session, &$files) { $publication = Input::Get('Pub', 'int', 0); $issue = Input::Get('Issue', 'int', 0); $section = Input::Get('Section', 'int', 0); $language = Input::Get('Language', 'int', 0); $sLanguage = Input::Get('sLanguage', 'int', 0); $articleNumber = Input::Get('Article', 'int', 0); if (!Input::IsValid()) { echo "Input Error: Missing input"; return; } // Unzip the sxw file to get the content. $zip = zip_open($files["filename"]["tmp_name"]); if ($zip) { $xml = null; while ($zip_entry = zip_read($zip)) { if (zip_entry_name($zip_entry) == "content.xml") { if (zip_entry_open($zip, $zip_entry, "r")) { $xml = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } } } zip_close($zip); if (!is_null($xml)) { // Write the XML to a file because the XSLT functions // require it to be in a file in order to be processed. $tmpXmlFilename = tempnam("/tmp", "ArticleImportXml"); $tmpXmlFile = fopen($tmpXmlFilename, "w"); fwrite($tmpXmlFile, $xml); fclose($tmpXmlFile); // Transform the OpenOffice document to DocBook format. $xsltProcessor = xslt_create(); $docbookXml = xslt_process($xsltProcessor, $tmpXmlFilename, "sxwToDocbook.xsl"); unlink($tmpXmlFilename); // Parse the docbook to get the data. $docBookParser = new DocBookParser(); $docBookParser->parseString($docbookXml, true); $article = new Article($articleNumber, $language); $article->setTitle($docBookParser->getTitle()); $article->setIntro($docBookParser->getIntro()); $article->setBody($docBookParser->getBody()); // Go back to the "Edit Article" page. header("Location: /$ADMIN/articles/edit.php?Pub=$publication&Issue=$issue&Section=$section&Article=$articleNumber&Language=$language&sLanguage=$sLanguage"); } // if (!is_null($xml)) } // if ($zip) // Some sort of error occurred - show the upload page again. include("index.php"); } // fn upload_article_handler
function extractZip($zipFile, $extract_path, $remove_path = '', $blacklist = '', $whitelist = '') { if ($zipFile == '' or $extract_path == '') { return false; } if (!file_exists($zipFile)) { return false; } $zip = zip_open($zipFile); $remove_path = addcslashes($remove_path, "/"); if (is_resource($zip)) { $i = 0; $extracted_files = array(); while ($zip_entry = zip_read($zip)) { $filename = zip_entry_name($zip_entry); $file_path = preg_replace("/{$remove_path}/", "", $filename); $dir_path = preg_replace("/{$remove_path}/", "", dirname($filename)); if (isset($blacklist) and is_array($blacklist) and in_array($file_path, $blacklist)) { continue; } if (isset($whitelist) and is_array($whitelist) and !in_array($filename, $whitelist)) { continue; } $completePath = $extract_path . $dir_path; $completeName = $extract_path . $file_path; // Walk through path to create non existing directories // This won't apply to empty directories ! They are created further below if (!file_exists($completePath) && preg_match('/^' . $remove_path . '/', dirname(zip_entry_name($zip_entry)))) { $tmp = PHP_OS == "WINNT" ? "" : DIRECTORY_SEPARATOR; foreach (explode('/', $completePath) as $k) { if ($k != "") { $tmp .= $k . DIRECTORY_SEPARATOR; if (!file_exists($tmp)) { mkdir($tmp, 0777); } } } } if (zip_entry_open($zip, $zip_entry, "r")) { if (preg_match('/^' . $remove_path . '/', dirname(zip_entry_name($zip_entry)))) { if (!preg_match("/\\/\$/", $completeName)) { if ($fd = fopen($completeName, 'w+')) { fwrite($fd, zip_entry_read($zip_entry, zip_entry_filesize($zip_entry))); fclose($fd); $extracted_files[$i]['filename'] = zip_entry_name($zip_entry); $i++; } } } zip_entry_close($zip_entry); } } zip_close($zip); return $extracted_files; } return false; }
public function current() { if (!zip_entry_open($this->resource, $this->entry)) { throw new SException("Zip file entry can not be read"); } $buffer = zip_entry_read($this->entry, zip_entry_filesize($this->entry)); zip_entry_close($this->entry); return $buffer; }
function unzip($dir, $file, $verbose = 0) { $name = substr($file, 0, strrpos($file, '.')); $extension = substr($file, strrpos($file, '.')); $dir_path = "{$dir}{$name}"; $zip_path = "{$dir}{$file}"; $ERROR_MSGS[0] = "OK"; $ERROR_MSGS[1] = "Zip path {$zip_path} doesn't exists."; $ERROR_MSGS[2] = "Directory {$dir_path} for unzip the pack already exists, impossible continue."; $ERROR_MSGS[3] = "Error while opening the {$zip_path} file."; $ERROR = 0; echo "inside unzip method" . "\n dir = " . $dir_path . " zippath = " . $zip_path; if (file_exists($zip_path)) { echo "status: file exists " . $zip_path . "\n"; if (!file_exists($dir_path)) { echo "making directory " . $dir_path . "\n"; mkdir($dir_path); } if ($link = zip_open($zip_path)) { echo "inside if open"; while (($zip_entry = zip_read($link)) && !$ERROR) { if (zip_entry_open($link, $zip_entry, "r")) { $data = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); $dir_name = dirname(zip_entry_name($zip_entry)); $name = zip_entry_name($zip_entry); if ($name[strlen($name) - 1] == '/') { $base = "{$dir_path}/"; foreach (explode("/", $name) as $k) { $base .= "{$k}/"; if (!file_exists($base)) { mkdir($base); } } } else { $name = "{$dir_path}/{$name}"; #if ($verbose) echo "\n extracting: {$name}<br>"; $stream = fopen($name, "w"); fwrite($stream, $data); } zip_entry_close($zip_entry); } else { $ERROR = 4; } } zip_close($link); } else { $ERROR = "3"; } } else { $ERROR = 2; } #} #else # $ERROR = 1; return $ERROR_MSGS[$ERROR]; }
function _output_UnpackScript($pagenum, $varnum, $path) { if ($this->config['system']['debug'] >= 5) { parent::_setError($pagenum, $varnum, '_output_UnpackScript'); } $return['isset'] = true; // the first argument is the zip file //$in_file = $_SERVER['argv'][1]; $in_file = $this->config['system']['directories']['scriptdir'] . '/script.zip'; /* any other arguments are specific files in the archive to unzip if ($_SERVER['argc'] > 2) { $all_files = 0; for ($i = 2; $i < $_SERVER['argc']; $i++) { $out_files[$_SERVER['argv'][$i]] = true; } } else { */ // if no other files are specified, unzip all files //$all_files = true; //} $z = zip_open($in_file); $count = 0; while ($entry = zip_read($z)) { $count++; $entry_name = zip_entry_name($entry); // check if all files should be unzipped, or the name of // this file is on the list of specific files to unzip //if ($all_files || $out_files[$entry_name]) { // only proceed if the file is not 0 bytes long if (zip_entry_filesize($entry)) { $dir = $path . '/' . dirname($entry_name); // make all necessary directories in the file's path if (!is_dir($dir)) { $this->__pc_mkdir_parents($dir); } $file = basename($entry_name); if (zip_entry_open($z, $entry)) { if ($fh = fopen($dir . '/' . $file, 'w')) { // write the entire file fwrite($fh, zip_entry_read($entry, zip_entry_filesize($entry))) or $return['isset'] = false; fclose($fh) or $return['isset'] = false; } else { $return['isset'] = false; } zip_entry_close($entry); } else { $return['isset'] = false; } } //} } if ($count == 0) { $return['isset'] = false; } return $return; }
/** * @desc This method gets the required XML snippets from the file, and extracts the image assets * @return $this, modifies $this->xml, $this->assets */ public function import() { $imageAssets = array(); $zip = zip_open($this->wordUri); while ($zipEntry = zip_read($zip)) { $entryName = zip_entry_name($zipEntry); if (zip_entry_open($zip, $zipEntry) == FALSE) { continue; } # /media/ contains all assets if (strpos($entryName, 'word/media') !== false) { # Removes 'word/media' prefix $imageName = substr($entryName, 11); # Prevent EMF file extensions passing, as they are used by word rather than being manually placed if (!$this->_allowEmfImages) { if (substr($imageName, -3) == 'emf') { continue; } } # Place the image assets into an array for future reference $imageAssets[$imageName] = array('h' => 'auto', 'w' => 'auto', 'title' => $imageName, 'id' => null, 'data' => base64_encode(zip_entry_read($zipEntry, zip_entry_filesize($zipEntry)))); } # Get the image relationship xml structure if ($entryName == 'word/_rels/document.xml.rels') { $this->xml['image'] = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry)); } # Get the document structure if ($entryName == 'word/document.xml') { $this->xml['structure'] = zip_entry_read($zipEntry, zip_entry_filesize($zipEntry)); } zip_entry_close($zipEntry); } zip_close($zip); # Apply relId's to the image array, so they can be attached to the structure if (isset($this->xml['image'])) { $dom = new \DOMDocument(); $dom->loadXML($this->xml['image'], LIBXML_NOENT | LIBXML_XINCLUDE | LIBXML_NOERROR | LIBXML_NOWARNING); $dom->encoding = 'utf-8'; $elements = $dom->getElementsByTagName('*'); foreach ($elements as $node) { if ($node->nodeName == 'Relationship') { $relationshipAttributes = $node->attributes; $relationId = $relationshipAttributes->item(0); $relationTarget = $relationshipAttributes->item(2); if (is_object($relationId) && is_object($relationTarget)) { if (strpos($relationTarget->nodeValue, 'media/') !== false) { $imageName = substr($relationTarget->nodeValue, 6); $imageAssets[$imageName]['id'] = $relationId->nodeValue; } } } } $this->images = $imageAssets; } return $this; }
/** * 读取docx文档(word文档) * @param string $filename 文档绝对路径 * @return string|bool */ public static function readDocx($filename) { set_time_limit(0); $striped_content = ''; $content = ''; $ext = strtolower(substr(strrchr($filename, '.'), 1)); if ($ext != 'docx') { return ''; } if (!$filename || !file_exists($filename)) { return ''; } $zip = zip_open($filename); if (!$zip || is_numeric($zip)) { return ''; } while ($zip_entry = zip_read($zip)) { if (zip_entry_open($zip, $zip_entry) == FALSE) { continue; } if (zip_entry_name($zip_entry) != "word/document.xml") { continue; } $content .= zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); zip_entry_close($zip_entry); } zip_close($zip); $content = str_replace('</w:r></w:p></w:tc><w:tc>', " ", $content); $content = str_replace('</w:r></w:p>', "\r\n", $content); $striped_content = strip_tags($content); return $striped_content; }