modname .= " (disabled)"; $this->modtype = "disabled"; } } function parser_open($args, $filename, &$rq_err, &$cgi_headers) { global $path_info, $docroot, $add_errmsg, $rq_file, $mime, $http_uri, $pri_redir, $out_contenttype; if (empty($path_info)) { return(loadfile($docroot.$http_uri, $rq_file["extension"], $rq_err, $cgi_headers)); } if (! ($this->ziphandle = zip_open($docroot.DIRECTORY_SEPARATOR.$filename))) { $rq_err = 500; $add_errmsg = "Accessed file was not in correct .ZIP format."; } else { $this->fp=$this->fpos=$this->size=0; $pi = trim($path_info, "/"); $pi_dir = substr($path_info, strlen($path_info)-1) == "/"; $dirname = false; $dirlist = array(); while ($this->fp = zip_read($this->ziphandle)) { $fn = zip_entry_name($this->fp); $fn = ltrim(str_replace("\\", "/", $fn), "/"); if ($fn == $pi) { break; } elseif (($dirname) && (strpos($fn, $dirname)===0) || ($dirname==="")){ $is_dir = substr($fn, strlen($fn)-1) == "/"; $fn = substr($fn, strlen($dirname)); if (!strpos(trim($fn, "/"), "/")) { $dirlist[] = array("filename"=>$fn, "size"=>zip_entry_filesize($this->fp), "is_dir"=>$is_dir); } } elseif (($path_info == "/") || ($fn == $pi."/") && !zip_entry_filesize($this->fp)) { if ($pi_dir) { $dirname = $pi; $dirlist[] = array("filename"=>"..", "is_dir"=>1, "size"=>0); } else { $pri_redir = $http_uri . $path_info . "/"; return; } } } if (!$this->fp) { if (count($dirlist) || ($dirname!==false)) { $rq_err = 501; $add_errmsg = "