0 ){ $protocol = $_SERVER['HTTP_X_FORWARDED_PROTO'].'://'; } $url_host = $_SERVER['SERVER_NAME'].($_SERVER['SERVER_PORT']=='80' ? '' : ':'.$_SERVER['SERVER_PORT']); $host = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $url_host; $host = isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $host;//proxy return $protocol.$host; } // current request url function this_url(){ $url = get_host().$_SERVER['REQUEST_URI']; return $url; } function reset_path($str){ return str_replace('\\','/',$str); } function get_webroot($app_path){ $web_root = str_replace(reset_path($_SERVER['SCRIPT_NAME']),'',$app_path.'index.php').'/'; if (substr($web_root,-10) == 'index.php/') {//解决部分主机不兼容问题 $web_root = reset_path($_SERVER['DOCUMENT_ROOT']).'/'; } return $web_root; } function is_wap(){ if(!isset($_SERVER['HTTP_USER_AGENT'])){ return false; } if(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|phone|iphone|ipad|ipod|android|xoom)/i', strtolower($_SERVER['HTTP_USER_AGENT']))){ return true; } if((isset($_SERVER['HTTP_ACCEPT'])) && (strpos(strtolower($_SERVER['HTTP_ACCEPT']),'application/vnd.wap.xhtml+xml') !== false)){ return true; } return false; } // url header 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); $j = strpos($name,"; ");//多个参数, if($j!== false){ $name = substr($name,0,$j); } $name = trim($name,'"'); } } if(isset($header['X-OutFileName'])){ $name = $header['X-OutFileName']; } if(!$name){ $name = get_path_this($url); if (stripos($name,'?')) $name = substr($name,0,stripos($name,'?')); if (!$name) $name = 'index.html'; } $name = rawurldecode($name); $name = str_replace(array('/','\\'),'-',$name);//safe; return array('length'=>$length,'name'=>$name); } // check url if can use function check_url($url){ $array = get_headers($url,true); $error = array('/404/','/403/','/500/'); foreach ($error as $value) { if (preg_match($value, $array[0])) { return false; } } return true; } /** * 获取网络url文件内容,加入ua,以解决防采集的站 */ function curl_get_contents($url){ $ch = curl_init(); $timeout = 4; $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1)"; curl_setopt ($ch, CURLOPT_URL, $url); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_USERAGENT, $user_agent); curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); $file_contents = curl_exec($ch); curl_close($ch); return $file_contents; } // refer URL function refer_url(){ return isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : ''; } function select_var($array){ if (!is_array($array)) return -1; ksort($array); $chosen = -1; foreach ($array as $k => $v) { if (isset($v)) { $chosen = $v; break; } } return $chosen; } /** * 解析url获得url参数 * @param $query * @return array array */ function parse_url_query($url){ $arr = parse_url($url); $queryParts = explode('&',$arr['query']); $params = array(); foreach ($queryParts as $param) { $item = explode('=', $param); $params[$item[0]] = $item[1]; } return $params; } function stripslashes_deep($value){ $value = is_array($value) ? array_map('stripslashes_deep', $value) : (isset($value) ? stripslashes($value) : null); return $value; } /** * GET/POST数据统一入口 * 将GET和POST的数据进行过滤,去掉非法字符以及hacker code,返回一个数组 * 注意如果GET和POST有相同的Key,POST优先 * * @return array $_GET和$_POST数据过滤处理后的值 */ function parse_incoming(){ global $_GET, $_POST,$_COOKIE; $_COOKIE = stripslashes_deep($_COOKIE); $_GET = stripslashes_deep($_GET); $_POST = stripslashes_deep($_POST); $return = array(); $return = array_merge($_GET,$_POST); $remote = array_get_index($return,0); $remote = explode('/',trim($remote[0],'/')); $return['URLremote'] = $remote; return $return; } function url2absolute($index_url, $preg_url){ if (preg_match('/[a-zA-Z]*\:\/\//', $preg_url)) return $preg_url; preg_match('/([a-zA-Z]*\:\/\/.*)\//', $index_url, $match); $index_url_temp = $match[1]; foreach(explode('/', $preg_url) as $key => $var) { if ($key == 0 && $var == '') { preg_match('/([a-zA-Z]*\:\/\/[^\/]*)\//', $index_url, $match); $index_url_temp = $match[1] . $preg_url; break; } if ($var == '..') { preg_match('/([a-zA-Z]*\:\/\/.*)\//', $index_url_temp, $match); $index_url_temp = $match[1]; } elseif ($var != '.') $index_url_temp .= '/' . $var; } return $index_url_temp; } // 输出js function exec_js($js){ echo "\n"; } // 禁止缓存 function no_cache(){ header("Pragma:no-cache\r\n"); header("Cache-Control:no-cache\r\n"); header("Expires:0\r\n"); } // 生成javascript转向 function go_url($url, $msg = ''){ header("Content-type: text/html; charset=utf-8\r\n"); echo "\n"; exit; } function send_http_status($i_status, $s_message = ''){ $a_status = array( // Informational 1xx 100 => 'Continue', 101 => 'Switching Protocols', // Success 2xx 200 => 'OK', 201 => 'Created', 202 => 'Accepted', 203 => 'Non-Authoritative Information', 204 => 'No Content', 205 => 'Reset Content', 206 => 'Partial Content', // Redirection 3xx 300 => 'Multiple Choices', 301 => 'Moved Permanently', 302 => 'Found', // 1.1 303 => 'See Other', 304 => 'Not Modified', 305 => 'Use Proxy', // 306 is deprecated but reserved 307 => 'Temporary Redirect', // Client Error 4xx 400 => 'Bad Request', 401 => 'Unauthorized', 402 => 'Payment Required', 403 => 'Forbidden', 404 => 'Not Found', 405 => 'Method Not Allowed', 406 => 'Not Acceptable', 407 => 'Proxy Authentication Required', 408 => 'Request Timeout', 409 => 'Conflict', 410 => 'Gone', 411 => 'Length Required', 412 => 'Precondition Failed', 413 => 'Request Entity Too Large', 414 => 'Request-URI Too Long', 415 => 'Unsupported Media Type', 416 => 'Requested Range Not Satisfiable', 417 => 'Expectation Failed', // Server Error 5xx 500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Timeout', 505 => 'HTTP Version Not Supported', 509 => 'Bandwidth Limit Exceeded' ); if (array_key_exists($i_status, $a_status)) { header('HTTP/1.1 ' . $i_status . ' ' . $a_status[$i_status]); } if ($s_message) { echo $s_message; exit(); } } //是否是windows function client_is_windows(){ static $is_windows; if(!is_array($is_windows)){ $is_windows = array(0); $os = get_os(); if(strstr($os,'Windows')){ $is_windows = array(1); } } return $is_windows[0]; } // 获取操作系统信息 TODO function get_os (){ $agent = $_SERVER['HTTP_USER_AGENT']; $preg_find = array( "Windows 95" =>array('win','95'), "Windows ME" =>array('win 9x','4.90'), "Windows 98" =>array('win','98'), "Windows 2000" =>array('win','nt 5.0',), "Windows XP" =>array('win','nt 5.1'), "Windows Vista" =>array('win','nt 6.0'), "Windows 7" =>array('win','nt 6.1'), "Windows 32" =>array('win','32'), "Windows NT" =>array('win','nt'), "Mac OS" =>array('Mac OS'), "Linux" =>array('linux'), "Unix" =>array('unix'), "SunOS" =>array('sun','os'), "IBM OS/2" =>array('ibm','os'), "Macintosh" =>array('Mac','PC'), "PowerPC" =>array('PowerPC'), "AIX" =>array('AIX'), "HPUX" =>array('HPUX'), "NetBSD" =>array('NetBSD'), "BSD" =>array('BSD'), "OSF1" =>array('OSF1'), "IRIX" =>array('IRIX'), "FreeBSD" =>array('FreeBSD'), ); $os=''; foreach ($preg_find as $key => $value) { if(count($value)==1 && stripos($agent,$value[0])){ $os=$key;break; }else if(count($value)==2 && stripos($agent,$value[0]) && stripos($agent,$value[1]) ){ $os=$key;break; } } if ($os=='') {$os = "Unknown"; } return $os; } //根据扩展名获取mime function get_file_mime($ext){ $mimetypes = array( "323" => "text/h323", "acx" => "application/internet-property-stream", "ai" => "application/postscript", "aif" => "audio/x-aiff", "aifc" => "audio/x-aiff", "aiff" => "audio/x-aiff", "asf" => "video/x-ms-asf", "asr" => "video/x-ms-asf", "asx" => "video/x-ms-asf", "au" => "audio/basic", "avi" => "video/x-msvideo", "axs" => "application/olescript", "bas" => "text/plain", "bcpio" => "application/x-bcpio", "bin" => "application/octet-stream", "bmp" => "image/bmp", "c" => "text/plain", "cat" => "application/vnd.ms-pkiseccat", "cdf" => "application/x-cdf", "cer" => "application/x-x509-ca-cert", "class" => "application/octet-stream", "clp" => "application/x-msclip", "cmx" => "image/x-cmx", "cod" => "image/cis-cod", "cpio" => "application/x-cpio", "crd" => "application/x-mscardfile", "crl" => "application/pkix-crl", "crt" => "application/x-x509-ca-cert", "csh" => "application/x-csh", "css" => "text/css", "dcr" => "application/x-director", "der" => "application/x-x509-ca-cert", "dir" => "application/x-director", "dll" => "application/x-msdownload", "dms" => "application/octet-stream", "doc" => "application/msword", "docx" => "application/msword", "dot" => "application/msword", "dvi" => "application/x-dvi", "dxr" => "application/x-director", "eps" => "application/postscript", "etx" => "text/x-setext", "evy" => "application/envoy", "exe" => "application/octet-stream", "fif" => "application/fractals", "flr" => "x-world/x-vrml", "flv" => "video/x-flv", "f4v" => "application/octet-stream", "gif" => "image/gif", "gtar" => "application/x-gtar", "gz" => "application/x-gzip", "h" => "text/plain", "hdf" => "application/x-hdf", "hlp" => "application/winhlp", "hqx" => "application/mac-binhex40", "hta" => "application/hta", "htc" => "text/x-component", "htm" => "text/html", "html" => "text/html", "htt" => "text/webviewhtml", "ico" => "image/x-icon", "ief" => "image/ief", "iii" => "application/x-iphone", "ins" => "application/x-internet-signup", "isp" => "application/x-internet-signup", "jfif" => "image/pipeg", "jpe" => "image/jpeg", "jpeg" => "image/jpeg", "jpg" => "image/jpeg", "js" => "application/javascript", "json" => "application/json", "latex" => "application/x-latex", "lha" => "application/octet-stream", "lsf" => "video/x-la-asf", "lsx" => "video/x-la-asf", "lzh" => "application/octet-stream", "m13" => "application/x-msmediaview", "m14" => "application/x-msmediaview", "m3u" => "audio/x-mpegurl", 'm4a' => "audio/mp4", 'm4v' => "audio/mp4", "man" => "application/x-troff-man", "mdb" => "application/x-msaccess", "me" => "application/x-troff-me", "mht" => "message/rfc822", "mhtml" => "message/rfc822", "mid" => "audio/mid", "mny" => "application/x-msmoney", "mov" => "video/quicktime", "movie" => "video/x-sgi-movie", "mp2" => "video/mpeg", "mp3" => "audio/mpeg", "mp4" => "video/mp4", "mp4v" => "video/mp4", "mpa" => "video/mpeg", "mpe" => "video/mpeg", "mpeg" => "video/mpeg", "mpg" => "video/mpeg", "mpp" => "application/vnd.ms-project", "mpv2" => "video/mpeg", "ms" => "application/x-troff-ms", "mvb" => "application/x-msmediaview", "nws" => "message/rfc822", "oda" => "application/oda", "ogg" => "audio/ogg", "oga" => "audio/ogg", "ogv" => "audio/ogg", "p10" => "application/pkcs10", "p12" => "application/x-pkcs12", "p7b" => "application/x-pkcs7-certificates", "p7c" => "application/x-pkcs7-mime", "p7m" => "application/x-pkcs7-mime", "p7r" => "application/x-pkcs7-certreqresp", "p7s" => "application/x-pkcs7-signature", "pbm" => "image/x-portable-bitmap", "pdf" => "application/pdf", "pfx" => "application/x-pkcs12", "pgm" => "image/x-portable-graymap", "pko" => "application/ynd.ms-pkipko", "pma" => "application/x-perfmon", "pmc" => "application/x-perfmon", "pml" => "application/x-perfmon", "pmr" => "application/x-perfmon", "pmw" => "application/x-perfmon", "png" => "image/png", "pnm" => "image/x-portable-anymap", "pot," => "application/vnd.ms-powerpoint", "ppm" => "image/x-portable-pixmap", "pps" => "application/vnd.ms-powerpoint", "ppt" => "application/vnd.ms-powerpoint", "pptx" => "application/vnd.ms-powerpoint", "prf" => "application/pics-rules", "ps" => "application/postscript", "pub" => "application/x-mspublisher", "qt" => "video/quicktime", "ra" => "audio/x-pn-realaudio", "ram" => "audio/x-pn-realaudio", "ras" => "image/x-cmu-raster", "rgb" => "image/x-rgb", "rmi audio/mid" => "http://www.dreamdu.com", "roff" => "application/x-troff", "rtf" => "application/rtf", "rtx" => "text/richtext", "scd" => "application/x-msschedule", "sct" => "text/scriptlet", "setpay" => "application/set-payment-initiation", "setreg" => "application/set-registration-initiation", "sh" => "application/x-sh", "shar" => "application/x-shar", "sit" => "application/x-stuffit", "snd" => "audio/basic", "spc" => "application/x-pkcs7-certificates", "spl" => "application/futuresplash", "src" => "application/x-wais-source", "sst" => "application/vnd.ms-pkicertstore", "stl" => "application/vnd.ms-pkistl", "stm" => "text/html", "svg" => "image/svg+xml", "sv4cpio" => "application/x-sv4cpio", "sv4crc" => "application/x-sv4crc", "swf" => "application/x-shockwave-flash", "t" => "application/x-troff", "tar" => "application/x-tar", "tcl" => "application/x-tcl", "tex" => "application/x-tex", "texi" => "application/x-texinfo", "texinfo" => "application/x-texinfo", "tgz" => "application/x-compressed", "tif" => "image/tiff", "tiff" => "image/tiff", "tr" => "application/x-troff", "trm" => "application/x-msterminal", "tsv" => "text/tab-separated-values", "txt" => "text/plain", "uls" => "text/iuls", "ustar" => "application/x-ustar", "vcf" => "text/x-vcard", "vrml" => "x-world/x-vrml", "wav" => "audio/wav", "wcm" => "application/vnd.ms-works", "wdb" => "application/vnd.ms-works", "webm" => "video/webm", "webmv" => "video/webm", "wks" => "application/vnd.ms-works", "wmf" => "application/x-msmetafile", "wps" => "application/vnd.ms-works", "wri" => "application/x-mswrite", "wrl" => "x-world/x-vrml", "wrz" => "x-world/x-vrml", "xaf" => "x-world/x-vrml", "xbm" => "image/x-xbitmap", "xla" => "application/vnd.ms-excel", "xlc" => "application/vnd.ms-excel", "xlm" => "application/vnd.ms-excel", "xls" => "application/vnd.ms-excel", "xlsx" => "application/vnd.ms-excel", "xlt" => "application/vnd.ms-excel", "xlw" => "application/vnd.ms-excel", "xof" => "x-world/x-vrml", "xpm" => "image/x-xpixmap", "xwd" => "image/x-xwindowdump", "z" => "application/x-compress", "zip" => "application/zip" ); //代码 或文本浏览器输出 $text = array('oexe','inc','inf','csv','log','asc','tsv'); $code = array("abap","abc","as","ada","adb","htgroups","htpasswd","conf","htaccess","htgroups", "htpasswd","asciidoc","asm","ahk","bat","cmd","c9search_results","cpp","c","cc","cxx","h","hh","hpp", "cirru","cr","clj","cljs","CBL","COB","coffee","cf","cson","Cakefile","cfm","cs","css","curly","d", "di","dart","diff","patch","Dockerfile","dot","dummy","dummy","e","ejs","ex","exs","elm","erl", "hrl","frt","fs","ldr","ftl","gcode","feature",".gitignore","glsl","frag","vert","go","groovy", "haml","hbs","handlebars","tpl","mustache","hs","hx","html","htm","xhtml","erb","rhtml","ini", "cfg","prefs","io","jack","jade","java","js","jsm","json","jq","jsp","jsx","jl","tex","latex", "ltx","bib","lean","hlean","less","liquid","lisp","ls","logic","lql","lsl","lua","lp","lucene", "Makefile","GNUmakefile","makefile","OCamlMakefile","make","md","markdown","mask","matlab", "mel","mc","mush","mysql","nix","m","mm","ml","mli","pas","p","pl","pm","pgsql","php","phtml", "ps1","praat","praatscript","psc","proc","plg","prolog","properties","proto","py","r","Rd", "Rhtml","rb","ru","gemspec","rake","Guardfile","Rakefile","Gemfile","rs","sass","scad","scala", "scm","rkt","scss","sh","bash",".bashrc","sjs","smarty","tpl","snippets","soy","space","sql", "styl","stylus","svg","tcl","tex","txt","textile","toml","twig","ts","typescript","str","vala", "vbs","vb","vm","v","vh","sv","svh","vhd","vhdl","xml","rdf","rss","log", "wsdl","xslt","atom","mathml","mml","xul","xbl","xaml","xq","yaml","yml","htm", "xib","storyboard","plist","csproj"); if (array_key_exists($ext,$mimetypes)){ return $mimetypes[$ext]; }else{ if(in_array($ext,$text) || in_array($ext,$code)){ return "text/plain"; } return 'application/octet-stream'; } }