public function fileGet() { $filename = _DIR($this->in['filename']); if (!is_readable($filename)) { show_json($this->L['no_permission_read'], false); } if (filesize($filename) >= 1024 * 1024 * 20) { show_json($this->L['edit_too_big'], false); } $filecontents = file_get_contents($filename); //文件内容 $charset = get_charset($filecontents); if ($charset != '' || $charset != 'utf-8') { $filecontents = mb_convert_encoding($filecontents, 'utf-8', $charset); } $data = array('ext' => get_path_ext($filename), 'name' => iconv_app(get_path_this($filename)), 'filename' => rawurldecode($this->in['filename']), 'charset' => $charset, 'content' => $filecontents); show_json($data); }
function url_header($url) { $name = ''; $length = 0; $header = @get_headers($url, true); if (!$header) { return false; } if (isset($header['Content-Length'])) { if (is_array($header['Content-Length'])) { $length = array_pop($header['Content-Length']); } else { $length = $header['Content-Length']; } } if (isset($header['Content-Disposition'])) { if (is_array($header['Content-Disposition'])) { $dis = array_pop($header['Content-Disposition']); } else { $dis = $header['Content-Disposition']; } $i = strpos($dis, "filename="); if ($i != false) { $name = substr($dis, $i + 9); $name = trim($name, '"'); } } if (!$name) { $name = get_path_this($url); if (stripos($name, '?')) { $name = substr($name, 0, stripos($name, '?')); } if (!$name) { $name = 'index.html'; } } // $header['name'] = $name; // return $header; return array('length' => $length, 'name' => $name); }
public function _make_file_proxy($file_path) { if (!file_exists($file_path)) { return ''; } if (!$GLOBALS['is_root'] && $GLOBALS['auth']['explorer:fileDownload'] != 1) { return ''; } load_class('mcrypt'); $pass = $GLOBALS['config']['setting_system']['system_password']; $fid = Mcrypt::encode($file_path, $pass, $GLOBALS['config']['settings']['download_url_time']); //文件对外界公开的地址;有效期在user_setting.php中设定;末尾追加文件名为了kod远程下载 $file_name = urlencode(get_path_this($file_path)); return APPHOST . 'index.php?user/public_link&fid=' . $fid . '&file_name=/' . $file_name; }
/** * 输出、文件下载 * 默认以附件方式下载;$download为false时则为输出文件 */ function file_put_out($file, $download = false) { if (!is_file($file)) { show_json('not a file!'); } if (!file_exists($file)) { show_json('file not exists', false); } if (!is_readable($file)) { show_json('file not readable', false); } set_time_limit(0); ob_clean(); //清除之前所有输出缓冲 TODO $mime = get_file_mime(get_path_ext($file)); if ($download || strstr($mime, 'application/') && $mime != 'application/x-shockwave-flash') { //下载或者application则设置下载头 $filename = get_path_this($file); //解决在IE中下载时中文乱码问题 if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT']) || preg_match('/Trident/', $_SERVER['HTTP_USER_AGENT'])) { if ($GLOBALS['config']['system_os'] != 'windows') { //win主机 ie浏览器;中文文件下载urlencode问题 $filename = str_replace('+', '%20', urlencode($filename)); } } header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment;filename=" . $filename); } else { //缓存文件 header('Expires: ' . date('D, d M Y H:i:s', time() + 3600 * 24 * 20) . ' GMT'); header("Cache-Pragma: public"); header("Cache-Control: cache, must-revalidate"); if (isset($_SERVER['If-Modified-Since']) && strtotime($_SERVER['If-Modified-Since']) == filemtime($file)) { header('HTTP/1.1 304 Not Modified'); header('Last-Modified: ' . date('D, d M Y H:i:s', filemtime($file)) . ' GMT'); //304 exit; } else { header('Last-Modified: ' . date('D, d M Y H:i:s', filemtime($file)) . ' GMT', true, 200); } $etag = '"' . md5(date('D, d M Y H:i:s', filemtime($file))) . '"'; if (isset($_SERVER['HTTP_IF_NONE_MATCH']) && $_SERVER['HTTP_IF_NONE_MATCH'] == $etag) { header('HTTP/1.1 304 Not Modified'); header('Etag: ' . $etag); exit; } else { header('Etag: ' . $etag); } } header("X-Powered-By: kodExplorer."); header("Content-Type: " . $mime); header("Accept-Ranges: bytes"); $size = get_filesize($file); $length = $size; // Content length $start = 0; // Start byte $end = $size - 1; // End byte if (isset($_SERVER['HTTP_RANGE']) || isset($_GET['start'])) { //分段请求;视频拖拽 $c_start = $start; $c_end = $end; if (isset($_GET['start'])) { $c_start = intval($_GET['start']); } else { //range list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); if (strpos($range, ',') !== false) { header('HTTP/1.1 416 Requested Range Not Satisfiable'); header("Content-Range: bytes {$start}-{$end}/{$size}"); exit; } if ($range == '-') { $c_start = $size - substr($range, 1); } else { $range = explode('-', $range); $c_start = $range[0]; $c_end = isset($range[1]) && is_numeric($range[1]) ? $range[1] : $size; } $c_end = $c_end > $end ? $end : $c_end; if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) { header('HTTP/1.1 416 Requested Range Not Satisfiable'); header("Content-Range: bytes {$start}-{$end}/{$size}"); exit; } } $start = $c_start; $end = $c_end; $length = $end - $start + 1; header('HTTP/1.1 206 Partial Content'); } header("Content-Range: bytes {$start}-{$end}/{$size}"); header("Content-Length: " . $length); //header("X-Sendfile: $file");exit; if (!($fp = @fopen($file, "rb"))) { exit; } fseek($fp, $start); while (!feof($fp)) { set_time_limit(0); print fread($fp, 1024 * 4); //输出文件 flush(); ob_flush(); } fclose($fp); }
function php_env_check() { $L = $GLOBALS['L']; $error = ''; $base_path = get_path_this(BASIC_PATH) . '/'; if (!function_exists('iconv')) { $error .= '<li>' . $L['php_env_error_iconv'] . '</li>'; } if (!function_exists('mb_convert_encoding')) { $error .= '<li>' . $L['php_env_error_mb_string'] . '</li>'; } if (!version_compare(PHP_VERSION, '5.0', '>=')) { $error .= '<li>' . $L['php_env_error_version'] . '</li>'; } if (!function_exists('file_get_contents')) { $error .= '<li>' . $L['php_env_error_file'] . '</li>'; } if (!path_writable(BASIC_PATH)) { $error .= '<li>' . $base_path . ' ' . $L['php_env_error_path'] . '</li>'; } if (!path_writable(BASIC_PATH . 'data')) { $error .= '<li>' . $base_path . 'data ' . $L['php_env_error_path'] . '</li>'; } if (!path_writable(BASIC_PATH . 'data/system')) { $error .= '<li>' . $base_path . 'data/system ' . $L['php_env_error_path'] . '</li>'; } if (!path_writable(BASIC_PATH . 'data/User')) { $error .= '<li>' . $base_path . 'data/User ' . $L['php_env_error_path'] . '</li>'; } if (!path_writable(BASIC_PATH . 'data/thumb')) { $error .= '<li>' . $base_path . 'data/thumb ' . $L['php_env_error_path'] . '</li>'; } if (!function_exists('imagecreatefromjpeg') || !function_exists('imagecreatefromgif') || !function_exists('imagecreatefrompng') || !function_exists('imagecolorallocate')) { $error .= '<li>' . $L['php_env_error_gd'] . '</li>'; } return $error; }
private function zip($zip_path) { if (!isset($zip_path)) { show_json($this->L['share_not_download_tips'], false); } load_class('pclzip'); ini_set('memory_limit', '2028M'); //2G; $zip_list = json_decode($this->in['list'], true); $list_num = count($zip_list); for ($i = 0; $i < $list_num; $i++) { $zip_list[$i]['path'] = _DIR_CLEAR($this->path . $this->_clear($zip_list[$i]['path'])); } //指定目录 if ($list_num == 1) { $path_this_name = get_path_this($zip_list[0]['path']); } else { $path_this_name = get_path_this(get_path_father($zip_list[0]['path'])); } $zipname = $zip_path . $path_this_name . '.zip'; $zipname = get_filename_auto($zipname, date(' h.i.s')); $files = array(); for ($i = 0; $i < $list_num; $i++) { $files[] = $zip_list[$i]['path']; } $remove_path_pre = get_path_father($zip_list[0]['path']); $archive = new PclZip($zipname); $v_list = $archive->create(implode(',', $files), PCLZIP_OPT_REMOVE_PATH, $remove_path_pre); return iconv_app($zipname); }
/** * 文件下载 */ function file_download($file) { if (!file_exists($file)) { show_json('file not exists'); } if (isset($_SERVER['HTTP_RANGE']) && $_SERVER['HTTP_RANGE'] != "" && preg_match("/^bytes=([0-9]+)-\$/i", $_SERVER['HTTP_RANGE'], $match) && $match[1] < $fsize) { $start = $match[1]; } else { $start = 0; } $size = filesize($file); header("Cache-Control: public"); header("Content-Type: application/octet-stream"); $filename = get_path_this($file); //解决在IE中下载时中文乱码问题 if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT'])) { $filename = str_replace('+', '%20', urlencode($filename)); } header("Content-Disposition: attachment;filename=" . get_path_this($file)); if ($start > 0) { header("HTTP/1.1 206 Partial Content"); header("Content-Length: " . ($size - $start)); header("Content-Ranges: bytes" . $start . "-" . ($size - 1) . "/" . $size); } else { header("Content-Length: {$size}"); header("Accept-Ranges: bytes"); } $fp = fopen($file, "rb"); fseek($fp, $start); while (!feof($fp)) { set_time_limit(0); print fread($fp, 1024 * 8); //输出文件 flush(); ob_flush(); } fclose($fp); exit; }
public function serverDownload() { $uuid = 'download_' . $this->in['uuid']; if ($this->in['type'] == 'percent') { //获取下载进度 //show_json($_SESSION[$uuid]); if (isset($_SESSION[$uuid])) { $info = $_SESSION[$uuid]; $result = array('uuid' => $this->in['uuid'], 'length' => (int) $info['length'], 'size' => (int) filesize($info['path'] . '.download'), 'time' => mtime()); show_json($result); } else { show_json('', false); } } else { if ($this->in['type'] == 'remove') { //取消下载;文件被删掉则自动停止 del_file($_SESSION[$uuid]['path']); unset($_SESSION[$uuid]); show_json('', false); } } //下载 $save_path = _DIR($this->in['save_path']); if (!is_writeable($save_path)) { show_json($this->L['no_permission_write'], false); } $url = rawurldecode($this->in['url']); $header = url_header($url); if (!$header) { show_json($this->L['download_error_exists'], false); } $save_path = $save_path . urldecode($header['name']); if (!checkExt($save_path)) { $save_path = _DIR($this->in['save_path']) . date() . '.temp'; } $save_path = iconv_system($save_path); $save_path = get_filename_auto($save_path); session_start(); $_SESSION[$uuid] = array('length' => $header['length'], 'path' => $save_path); session_write_close(); if (file_download_this($url, $save_path)) { $name = get_path_this(iconv_app($save_path)); show_json($this->L['download_success'], true, $name); } else { show_json($this->L['download_error_create'], false); } }
function path_search($path, $search, $is_content = false, $file_ext = '', $is_case = false) { $ext_arr = explode("|", $file_ext); recursion_dir($path, $dirs, $files, -1, 0); $strpos = 'stripos'; //是否区分大小写 if ($is_case) { $strpos = 'strpos'; } $filelist = array(); $folderlist = array(); foreach ($files as $f) { $ext = get_path_ext($f); $path_this = get_path_this($f); if ($file_ext != '' && !in_array($ext, $ext_arr)) { continue; } //文件类型不在用户限定内 if ($strpos($path_this, $search) !== false) { //搜索文件名;搜到就返回;搜不到继续 $filelist[] = file_info($f); continue; } if ($is_content && is_file($f)) { $fp = fopen($f, "r"); $content = @fread($fp, get_filesize($f)); fclose($fp); if ($strpos($content, iconv_app($search)) !== false) { $filelist[] = file_info($f); } } } if ($file_ext == '') { //没限定扩展名则才搜索文件夹 foreach ($dirs as $f) { $path_this = get_path_this($f); if ($strpos($path_this, $search) !== false) { $folderlist[] = array('name' => iconv_app(get_path_this($f)), 'path' => iconv_app(get_path_father($f))); } } } return array('folderlist' => $folderlist, 'filelist' => $filelist); }
public function unzip() { load_class('pclzip'); ini_set('memory_limit', '2028M'); //2G; $path = $this->path; $name = get_path_this($path); $name = substr($name, 0, strrpos($name, '.')); $path_father_name = get_path_father($path); $unzip_to = $path_father_name . $path_this_name; if (isset($this->in['path_to'])) { //解压到指定位置 $unzip_to = _DIR($this->in['path_to']); } $zip = new PclZip($path); $result = $zip->extract(PCLZIP_OPT_PATH, $unzip_to, PCLZIP_OPT_SET_CHMOD, 0777, PCLZIP_OPT_REPLACE_NEWER); //解压到某个地方,覆盖方式 if ($result == 0) { show_json("Error : " . $zip->errorInfo(true), fasle); } else { show_json($this->L['unzip_success']); } }
/** * Output, file download * Default attachment download; $ download is false when compared to the output file */ function file_put_out($file, $download = false) { if (!is_file($file)) { show_json('not a file!'); } set_time_limit(0); //ob_clean();//Clear until all output buffers if (!file_exists($file)) { show_json('file not exists', false); } if (isset($_SERVER['HTTP_RANGE']) && $_SERVER['HTTP_RANGE'] != "" && preg_match("/^bytes=([0-9]+)-\$/i", $_SERVER['HTTP_RANGE'], $match) && $match[1] < $fsize) { $start = $match[1]; } else { $start = 0; } $size = get_filesize($file); $mime = get_file_mime(get_path_ext($file)); if ($download || strstr($mime, 'application/')) { //Download or download application is set head $filename = get_path_this($file); //Download IE resolve when Chinese garbage problem if (preg_match('/MSIE/', $_SERVER['HTTP_USER_AGENT']) || preg_match('/Trident/', $_SERVER['HTTP_USER_AGENT'])) { if ($GLOBALS['config']['system_os'] != 'windows') { //win the host ie browser; Chinese file download urlencode problem $filename = str_replace('+', '%20', urlencode($filename)); } } header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment;filename=" . $filename); } header("Cache-Control: public"); header("X-Powered-By: kodExplorer."); header("Content-Type: " . $mime); if ($start > 0) { header("HTTP/1.1 206 Partial Content"); header("Content-Ranges: bytes" . $start . "-" . ($size - 1) . "/" . $size); header("Content-Length: " . ($size - $start)); } else { header("Accept-Ranges: bytes"); header("Content-Length: {$size}"); } $fp = fopen($file, "rb"); fseek($fp, $start); while (!feof($fp)) { print fread($fp, 1024 * 8); //Output File flush(); ob_flush(); } fclose($fp); }
public function _make_file_proxy($file_path) { if (!file_exists($file_path)) { return ''; } if (!$GLOBALS['is_root'] && $GLOBALS['auth']['explorer:fileDownload'] != 1) { return ''; } load_class('mcrypt'); $pass = $GLOBALS['config']['setting_system']['system_password']; $fid = Mcrypt::encode($file_path, $pass, $GLOBALS['config']['settings']['download_url_time']); //Documents outside public address; valid set of user setting.php; append the file name of the remote download kod $file_name = urlencode(get_path_this($file_path)); return APPHOST . 'index.php?user/public_link&fid=' . $fid . '&file_name=/' . $file_name; }
/** * 文件下载 */ function file_download($file) { if (file_exists($file)) { header("Cache-Control: public"); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment;filename=" . get_path_this($file)); header("Accept-Ranges: bytes"); $size = filesize($file); //如果有$_SERVER['HTTP_RANGE']参数 断点续传 if (isset($_SERVER['HTTP_RANGE'])) { list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']); str_replace($range, "-", $range); $size2 = $size - 1; //文件总字节数 $new_length = $size2 - $range; //获取下次下载的长度 header("HTTP/1.1 206 Partial Content"); header("Content-Length: {$new_length}"); //输入总长 header("Content-Range: bytes {$range}{$size2}/{$size}"); } else { //第一次连接 $size2 = $size - 1; header("Content-Range: bytes 0-{$size2}/{$size}"); //Content-Range: bytes 0-4988927/4988928 header("Content-Length: " . $size); //输出总长 } $fp = fopen($file, "rb"); fseek($fp, $range); while (!feof($fp)) { set_time_limit(0); print fread($fp, 1024 * 8); //输出文件 flush(); ob_flush(); } fclose($fp); exit; } }
function php_env_check() { $L = $GLOBALS['L']; $error = ''; $base_path = get_path_this(BASIC_PATH) . '/'; if (!function_exists('iconv')) { $error .= '<li>' . $L['php_env_error_iconv'] . '</li>'; } if (!function_exists('mb_convert_encoding')) { $error .= '<li>' . $L['php_env_error_mb_string'] . '</li>'; } if (!version_compare(PHP_VERSION, '5.0', '>=')) { $error .= '<li>' . $L['php_env_error_version'] . '</li>'; } if (!function_exists('file_get_contents')) { $error .= '<li>' . $L['php_env_error_file'] . '</li>'; } if (!path_writable(BASIC_PATH)) { $error .= '<li>' . $base_path . ' ' . $L['php_env_error_path'] . '</li>'; } if (!path_writable(BASIC_PATH . 'data')) { $error .= '<li>' . $base_path . 'data ' . $L['php_env_error_path'] . '</li>'; } $parent = get_path_father(BASIC_PATH); $arr_check = array(BASIC_PATH, BASIC_PATH . 'data', BASIC_PATH . 'data/system', BASIC_PATH . 'data/User', BASIC_PATH . 'data/thumb'); foreach ($arr_check as $value) { if (!path_writable($value)) { $error .= '<li>' . str_replace($parent, '', $value) . '/ ' . $L['php_env_error_path'] . '</li>'; } } if (!function_exists('imagecreatefromjpeg') || !function_exists('imagecreatefromgif') || !function_exists('imagecreatefrompng') || !function_exists('imagecolorallocate')) { $error .= '<li>' . $L['php_env_error_gd'] . '</li>'; } return $error; }