Beispiel #1
0
 public function message($msg, $jumpurl = '')
 {
     if (core::gpc('ajax')) {
         $arr = array('servererror' => '', 'status' => 1, 'message' => $msg);
         echo core::json_encode($arr);
         exit;
     } else {
         echo $msg;
         exit;
     }
 }
Beispiel #2
0
 public function display($file, $json = array())
 {
     if (!core::gpc('ajax', 'R')) {
         extract($this->vars, EXTR_SKIP);
         include $this->gettpl($file);
         // json 格式,约定为格式。
     } else {
         ob_start();
         extract($this->vars, EXTR_SKIP);
         include $this->gettpl($file);
         $body = ob_get_contents();
         ob_end_clean();
         $json = array('servererror' => '', 'status' => 1, 'message' => array('width' => 400, 'height' => 300, 'pos' => 'center', 'title' => '默认窗口标题', 'body' => ''));
         $json['message'] = array_merge($json['message'], $this->json);
         $this->fetch_json_header($body, $json['message']);
         $json['message']['body'] = $body;
         echo core::json_encode($json);
     }
 }
Beispiel #3
0
 public static function rand_name($k)
 {
     return core::gpc('time', 'S') . '_' . rand(1000000000, 9999999999) . '_' . $k;
 }
Beispiel #4
0
<?php

/*
 * XiunoPHP v1.2
 * http://www.xiuno.com/
 *
 * Copyright 2010 (c) axiuno@gmail.com
 * GNU LESSER GENERAL PUBLIC LICENSE Version 3
 * http://www.gnu.org/licenses/lgpl.html
 *
 */
if (empty($_SERVER['ip'])) {
    $_SERVER['ip'] = core::gpc('REMOTE_ADDR', 'S');
}
if (empty($_SERVER['time'])) {
    $_SERVER['time'] = time();
}
// 仅仅用来显示 Exception
class xn_exception
{
    /*
    // 异常CODE,用来标示是哪个模块产生的异常。暂时不需要。
    const APP_EXCEPTION_CODE_ERROR_HANDLE = 1;
    const APP_EXCEPTION_CODE_MYSQL = 2;
    const APP_EXCEPTION_CODE_LOG = 3;
    */
    public static function format_exception($e)
    {
        $trace = $e->getTrace();
        // 如果是 error_handle ,弹出第一个元素。
        if (!empty($trace) && $trace[0]['function'] == 'error_handle' && $trace[0]['class'] == 'core') {
Beispiel #5
0
 public static function ob_handle($s)
 {
     if (!empty($_SERVER['ob_stack'])) {
         $gzipon = array_pop($_SERVER['ob_stack']);
     } else {
         // throw new Exception('');
         $gzipon = 0;
     }
     $isfirst = count($_SERVER['ob_stack']) == 0;
     if ($gzipon && !ini_get('zlib.output_compression') && function_exists('gzencode') && strpos(core::gpc('HTTP_ACCEPT_ENCODING', 'S'), 'gzip') !== FALSE) {
         $s = gzencode($s, 5);
         // 0 - 9 级别, 9 最小,最耗费 CPU
         $isfirst && header("Content-Encoding: gzip");
         //$isfirst && header("Vary: Accept-Encoding");	// 下载的时候,IE 6 会直接输出脚本名,而不是文件名!非常诡异!估计是压缩标志混乱。
         $isfirst && header("Content-Length: " . strlen($s));
     } else {
         // PHP 强制发送的 gzip 头
         if (ini_get('zlib.output_compression')) {
             $isfirst && header("Content-Encoding: gzip");
         } else {
             $isfirst && header("Content-Encoding: none");
             $isfirst && header("Content-Length: " . strlen($s));
         }
     }
     return $s;
 }
Beispiel #6
0
 public static function run(&$conf)
 {
     //---------------------------------->  包含相关的 control,并实例化
     $control = core::gpc(0);
     $action = core::gpc(1);
     $objfile = $conf['tmp_path'] . $conf['app_id'] . "_control_{$control}_control.class.php";
     // 如果缓存文件不存在,则搜索目录
     if (!is_file($objfile) || DEBUG > 0 && !IN_SAE) {
         $controlfile = '';
         if (empty($conf['plugin_disable'])) {
             $plugins = core::get_enable_plugins($conf);
             $pluginnames = array_keys($plugins);
             foreach ($pluginnames as $v) {
                 // 如果有相关的 app path, 这只读取该目录, plugin/xxx/abc_control.class.php, plugin/xxx/admin/abc_control.class.php
                 $path = $conf['plugin_path'] . $v . '/';
                 if (is_file($path . $conf['app_id'] . '/' . "{$control}_control.class.php")) {
                     $controlfile = $path . $conf['app_id'] . '/' . "{$control}_control.class.php";
                     break;
                 }
                 if (is_file($path . "{$control}_control.class.php")) {
                     $controlfile = $path . "{$control}_control.class.php";
                     break;
                 } else {
                     $controlfile = '';
                 }
             }
         }
         if (empty($controlfile)) {
             $paths = $conf['control_path'];
             foreach ($paths as $path) {
                 $controlfile = $path . "{$control}_control.class.php";
                 if (is_file($controlfile)) {
                     break;
                 } else {
                     $controlfile = '';
                 }
             }
         }
         if (empty($controlfile)) {
             throw new Exception("您输入的URL 不合法,{$control} control 不存在。");
         }
         // 处理 hook  urlrewrite, static_url
         if (!is_file($controlfile)) {
             throw new Exception("您输入的URL 不合法,{$control} control 不存在。");
         }
         $s = file_get_contents($controlfile);
         core::process_include($conf, $s);
         $_ENV['preg_replace_callback_arg'] = $conf;
         $s = preg_replace_callback('#\\t*\\/\\/\\s*hook\\s+([^\\s]+)#is', 'core::process_hook_callback', $s);
         core::process_urlrewrite($conf, $s);
         file_put_contents($objfile, $s);
     }
     if (include $objfile) {
         $controlclass = "{$control}_control";
         $onaction = "on_{$action}";
         $newcontrol = new $controlclass($conf);
         if (method_exists($newcontrol, $onaction)) {
             $newcontrol->{$onaction}();
         } else {
             throw new Exception("您输入的URL 不合法,{$action} 方法未实现:");
         }
     } else {
         throw new Exception("您输入的URL 不合法,{$control} control 不存在。");
     }
     unset($newcontrol, $control, $action);
 }
Beispiel #7
0
 /**
  * Custom error handler.
  *
  * Catches all errors (not exceptions) and creates an ErrorException.
  * ErrorException then can caught by Yaf\ErrorController.
  *
  * @param integer $errno the error number.
  * @param string $errstr the error message.
  * @param string $errfile the file where error occured.
  * @param integer $errline the line of the file where error occured.
  *
  * @throws ErrorException
  */
 static function error_handler($errno, $errstr, $errfile, $errline)
 {
     // 防止死循环
     $errortype = array(E_ERROR => 'Error', E_WARNING => 'Warning', E_PARSE => 'Parsing Error', E_NOTICE => 'Notice', E_CORE_ERROR => 'Core Error', E_CORE_WARNING => 'Core Warning', E_COMPILE_ERROR => 'Compile Error', E_COMPILE_WARNING => 'Compile Warning', E_USER_ERROR => 'User Error', E_USER_WARNING => 'User Warning', E_USER_NOTICE => 'User Notice', E_STRICT => 'Runtime Notice');
     $errnostr = isset($errortype[$errno]) ? $errortype[$errno] : 'Unknonw';
     // 运行时致命错误,直接退出。并且 debug_backtrace()
     $s = "[{$errnostr}] : {$errstr} in File {$errfile}, Line: {$errline}";
     // 抛出异常,记录到日志
     //echo $errstr;
     if (DEBUG && empty($_SERVER['exception'])) {
         throw new Exception($s);
     } else {
         log::write($s . date('Y-M-D H:i:s', $_SERVER['time']));
         //$s = preg_replace('# \S*[/\\\\](.+?\.php)#', ' \\1', $s);
         if (core::gpc('ajax', 'R')) {
             core::ob_clean();
             //$s = preg_replace('#[\\x80-\\xff]{2}#', '?', $s);// 替换掉 gbk, 否则 json_encode 会报错!
             // 判断错误级别,决定是否退出。
             if ($errno != E_NOTICE && $errno != E_USER_ERROR && $errno != E_USER_NOTICE && $errno != E_USER_WARNING) {
                 $s = core::json_encode(array('servererror' => $s));
                 throw new Exception($s);
                 exit;
             } else {
                 $_SERVER['notice_error'] .= $s;
                 // 继续执行。
             }
         } else {
             //echo $s;
             // 继续执行。
         }
     }
     return 0;
 }
Beispiel #8
0
 public static function get_script_uri()
 {
     $port = core::gpc('SERVER_PORT', 'S');
     //$portadd = $port == 80 ? '' : ':80';
     $host = core::gpc('HTTP_HOST', 'S');
     //$schme = self::gpc('SERVER_PROTOCOL', 'S');
     // [SERVER_SOFTWARE] => Microsoft-IIS/6.0
     // [REQUEST_URI] => /index.php
     // [HTTP_X_REWRITE_URL] => /?a=b
     // iis
     if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {
         $request_uri = $_SERVER['HTTP_X_REWRITE_URL'];
     } else {
         $request_uri = $_SERVER['REQUEST_URI'];
     }
     return "http://{$host}" . $request_uri;
     //if(isset($_SERVER['SCRIPT_URI']) && 0) {
     //	return $_SERVER['SCRIPT_URI'];// 会漏掉 query_string, .core::gpc('QUERY_STRING', 'S');
     //}
 }
Beispiel #9
0
 public static function fetch_url($url, $timeout = 10, $post = '', $cookie = '', $deep = 0)
 {
     if ($deep > 5) {
         throw new Exception('超出 fetch_url() 最大递归深度!');
     }
     if (substr($url, 0, 5) == 'https') {
         return self::https_fetch_url($url, $timeout, $post, $cookie, $deep);
     }
     $w = stream_get_wrappers();
     $allow_url_fopen = strtolower(ini_get('allow_url_fopen'));
     $allow_url_fopen = empty($allow_url_fopen) || $allow_url_fopen == 'off' ? 0 : 1;
     if (function_exists('fsockopen')) {
         $limit = 2000000;
         $ip = '';
         $return = '';
         $matches = parse_url($url);
         $host = $matches['host'];
         $path = $matches['path'] ? $matches['path'] . (!empty($matches['query']) ? '?' . $matches['query'] : '') : '/';
         $port = !empty($matches['port']) ? $matches['port'] : 80;
         $HTTP_USER_AGENT = core::gpc('$HTTP_USER_AGENT', 'S');
         empty($HTTP_USER_AGENT) && ($HTTP_USER_AGENT = 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)');
         if (empty($post)) {
             $out = "GET {$path} HTTP/1.0\r\n";
             $out .= "Accept: */*\r\n";
             $out .= "Accept-Language: zh-cn\r\n";
             $out .= "User-Agent: {$HTTP_USER_AGENT}\r\n";
             $out .= "Host: {$host}\r\n";
             $out .= "Connection: Close\r\n";
             $out .= "Cookie:{$cookie}\r\n\r\n";
         } else {
             $out = "POST {$path} HTTP/1.0\r\n";
             $out .= "Accept: */*\r\n";
             $out .= "Accept-Language: zh-cn\r\n";
             $out .= "User-Agent: {$HTTP_USER_AGENT}\r\n";
             $out .= "Host: {$host}\r\n";
             $out .= 'Content-Length: ' . strlen($post) . "\r\n";
             $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
             $out .= "Connection: Close\r\n";
             $out .= "Cache-Control: no-cache\r\n";
             $out .= "Cookie:{$cookie}\r\n\r\n";
             $out .= $post;
         }
         $host == 'localhost' && ($ip = '127.0.0.1');
         $fp = @fsockopen($ip ? $ip : $host, $port, $errno, $errstr, $timeout);
         if (!$fp) {
             return FALSE;
         } else {
             stream_set_blocking($fp, TRUE);
             stream_set_timeout($fp, $timeout);
             @fwrite($fp, $out);
             $status = stream_get_meta_data($fp);
             if (!$status['timed_out']) {
                 $starttime = time();
                 while (!feof($fp)) {
                     if (($header = @fgets($fp)) && ($header == "\r\n" || $header == "\n")) {
                         break;
                         //Location: http://plugin.xiuno.net/upload/plugin/66/b0c35647c63b8b880766b50c06586c13.zip
                     } else {
                         if (strtolower(substr($header, 0, 9)) == 'location:') {
                             $location = trim(substr($header, 9));
                             return self::fetch_url($location, $timeout, $post, $cookie, $deep + 1);
                         }
                     }
                 }
                 $stop = false;
                 while (!feof($fp) && !$stop) {
                     $data = fread($fp, $limit == 0 || $limit > 8192 ? 8192 : $limit);
                     $return .= $data;
                     if ($limit) {
                         $limit -= strlen($data);
                         $stop = $limit <= 0;
                     }
                     if (time() - $starttime > $timeout) {
                         break;
                     }
                 }
             }
             @fclose($fp);
             return $return;
         }
     } elseif (function_exists('curl_init')) {
         $ch = curl_init();
         curl_setopt($ch, CURLOPT_URL, $url);
         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
         curl_setopt($ch, CURLOPT_HEADER, 1);
         if ($post) {
             curl_setopt($ch, CURLOPT_POST, 1);
             curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
         }
         if ($cookie) {
             curl_setopt($ch, CURLOPT_HTTPHEADER, array('Cookie', $cookie));
         }
         $data = curl_exec($ch);
         if (curl_errno($ch)) {
             throw new Exception('Errno' . curl_error($ch));
             //捕抓异常
         }
         if (!$data) {
             curl_close($ch);
             return '';
         }
         list($header, $data) = explode("\r\n\r\n", $data);
         $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
         if ($http_code == 301 || $http_code == 302) {
             $matches = array();
             preg_match('/Location:(.*?)\\n/', $header, $matches);
             $url = trim(array_pop($matches));
             curl_setopt($ch, CURLOPT_URL, $url);
             curl_setopt($ch, CURLOPT_HEADER, false);
             $data = curl_exec($ch);
         }
         curl_close($ch);
         return $data;
     } elseif ($allow_url_fopen && empty($post) && empty($cookie) && in_array('http', $w)) {
         // 尝试连接
         $opts = array('http' => array('method' => 'GET', 'timeout' => $timeout));
         $context = stream_context_create($opts);
         $html = file_get_contents($url, false, $context);
         return $html;
     } else {
         log::write('fetch_url() failed: ' . $url);
         return FALSE;
     }
 }
Beispiel #10
0
 public static function is_robot()
 {
     $robots = array('robot', 'spider', 'slurp');
     foreach ($robots as $robot) {
         if (strpos(core::gpc('HTTP_USER_AGENT', 'S'), $robot) !== FALSE) {
             return TRUE;
         }
     }
     return FALSE;
 }