EasyPhp

入口文件

<?php
date_default_timezone_set('Asia/Shanghai');
error_reporting(E_ALL ^ E_NOTICE);
set_time_limit(300);
define("ROOT_PATH" ,dirname(__FILE__));
ini_set("error_log",constant("ROOT_PATH")."/Log/error_log.log");
require_once(ROOT_PATH."/Include/Common.Class.php");

Common.Class.php

<?php
require_once("DB.Class.php");
class Common extends DB{
    function __construct() {
        parent::__construct();
    }
}

$Model=Common::G("Model",Config::$DefaultModel);
$Action=Common::G("Action",Config::$DefaultAction);
if ($Model!=""){
    $phpFile = ROOT_PATH."/Model/$Model.class.php";
    if (is_file($phpFile)){
        require_once($phpFile);
    }else{
        require_once(ROOT_PATH."/404.html");
    }
    (New $Model())->$Action();
}

DB.Class.php

<?php
require_once("Basic.Class.php");                                                                            //网站配置文件
class DB extends Basic{
    Public $DangerousStringsArr="'|select |insert|update|../|./|\/|delete|/*|* |union|into|load_file|outfile|char(|chr|and |or |eval(|assert|system(|exec(|shell_exec(|passthru|escapeshellcmd|pcntl_exec|file_get_contents|file_put_contents|replace|mysql";


    function __construct() {
        parent::__construct();
        $this->check_request();
        $this->db();
    }
    Function db(){
        if (!self::$cur_db){
            self::$cur_db = new PDO("mysql:host=$this->mysql_server_name;dbname=$this->mysql_database", $this->mysql_username, $this->mysql_password,array(PDO::ATTR_PERSISTENT => false));//打开连接
            self::$cur_db->query("SET NAMES UTF8");
        }
        return self::$cur_db;
    }
    Function __destruct(){
        if ($this->db()){

        }
    }
    /*============================================
     函数名:page_select_sql
     作  用:分页查询
     参  数:无
     返  回:结果集
     ============================================*/
    Public Function page_select_sql($sql){
        $result = $this->db()->query($sql);
        if ($result){
            $new_array=array();
            while( ($row = $result->fetch(PDO::FETCH_ASSOC)) !== false ){
                $new_array[]=$row;
            }
            return $new_array;
        }else{
            return false;
        }
    }

    /*============================================
     函数名:json_select_sql
     作  用:查询SQL输出JSON数据类型.
     参  数:无
     返  回:结果集
     ============================================*/
    Public Function json_select_sql($sql){
        $res = $this->page_select_sql($sql);
        if (is_array($res)){
            $json = $this->json_encode($res[0],JSON_UNESCAPED_UNICODE);
        }else{
            $json = "[]";
        }
        return $json;
    }

    /*============================================
     函数名:select_sql
     作  用:完成select
     参  数:无
     返  回:结果集
     ============================================*/
    Public Function select_sql($sql){
        try {
            $res=$this->db()->query($sql);                  //执行sql  语句
        } catch (Exception $e) {
            die($e->getMessage());
        }
        if($res->rowCount()>0){                                        //获取语句查询个数进行判断反回数组操作
            $rs=array();
            while( ($row=$res->fetch(PDO::FETCH_ASSOC) ) !== false){
                array_push($rs,$row);
            }
            return $rs;
        }else{
            return false;
        }
    }

    /*============================================
     函数名:mysql_sql
     作  用:执行SQL
     参  数:无
     返  回:结果集
     ============================================*/
    Public Function mysql_sql($sql){
        try {
            $res=$this->db()->query($sql);
            if ($res){
                return $res;
            }else{
            }
        } catch (Exception $e) {
            die($e->getMessage());
        }
        return null;
    }

    /*============================================
     函数名:json_select_sql_all
     作  用:查询SQL输出JSON数据类型.
     参  数:无
     返  回:结果集
     ============================================*/
    Public Function json_select_sql_all($sql){
        //echo $sql;
        $res=$this->mysql_sql($sql);                   //执行sql  语句
        if($res->rowCount()>0){                                        //获取语句查询个数进行判断反回数组操作
            $rs=array();
            while(  ($row=$res->fetch(PDO::FETCH_ASSOC) ) !== false ){
                array_push($rs,$row);
            }
            return $this->json_encode($rs,JSON_UNESCAPED_UNICODE);
        }else{
            return "[]";
        }
    }

    Public function json_encode($str,$options = JSON_UNESCAPED_UNICODE) {
        return urldecode(json_encode($this->url_encode($str),$options));
    }
    Public function url_encode($str) {
        if(is_array($str)) {
            foreach($str as $key=>$value) {
                $str[urlencode($key)] = $this->url_encode($value);
            }
        } else {
            $str = urlencode($str);
        }

        return $str;
    }


    /*============================================
     函数名:insert_sql
     作  用:插入SQL语句
     参  数:无
     返  回:成功:ID 失败:false
     ============================================*/
    Public Function insert_sql($table,$array) {
        $sql = "insert into $table (";
        while( (list($name,$value) = each($array)) !== false  ) {
            $sql .= "$name,";
        }
        $sql[strlen($sql)-1] = ')';
        $sql .= " values (";
        reset($array);
        while( (list($name,$value) = each($array)) !== false ) {
            if(is_string($value)||empty($value))
                $sql .= "'$value',";
                else
                    $sql .= "$value,";
        }
        $sql[strlen($sql)-1] = ')';
        $sql .= ";";
        //echo $sql;

        if($this->mysql_sql($sql)){
            return $this->mysql_insert_id();
        }else{
            $error=$this->db()->errorInfo();
            $log=fopen(ROOT_PATH."/Log/insert_sql_error.log","a+");
            fwrite($log,"sql=$sql error=$error\r\n");
            fclose($log);
            return false;
        }
    }


    public Function json_select_sql_table($table,$where = null,$pageIndex = 1,$pageSize = 10,$clos = null,$begin = 0,$order=null){
        $sql = "SELECT ";
        if ($clos && is_array($clos) && count($clos) > 0){
            $closIndex = 0;
            foreach($clos as $clo)
            {
                if ($closIndex != 0){
                    $sql .= " , ";
                }
                $sql .= " $clo ";
                $closIndex++;
            }
        }else{
            $sql.=" * ";
        }
        $sql.=" FROM `$table` ";
        if ($where && is_array($where)){
            $whereIndex = 0;
            foreach($where as $key => $value)
            {
                if ($whereIndex == 0){
                    $sql.=" where ";
                }else{
                    $sql.=" and ";
                }
                $sql.= " $key = $value ";
                $whereIndex++;
            }
        }

        if ($order){
            if($order && is_array($order) && count($order) > 0){
                $sql .= " ORDER BY ";
                $orderIndex = 0;
                foreach($order as $key => $value)
                {
                    if ($orderIndex != 0){
                        $sql.=" , ";
                    }
                    if (is_numeric($key)){
                        $sql .= $value;
                        $sql .= "ASC ";
                    }else{
                        $sql .= " $key ";
                        $sql .= " $value ";
                    }
                }
            }else{
                $sql .= " ORDER BY ";
                $sql .= $order;
                $sql .= " ASC ";
            }
        }

        $pageIndex--;
        $limitIndex = $pageIndex*$pageSize;

        $limitIndex+=$begin;

        $sql .= " LIMIT  $limitIndex,$pageSize";
        return $this->json_select_sql_all($sql);
    }


    Public Function mysql_insert_id(){
        return $this->db()->lastInsertId();
    }
    /*============================================
     函数名:update_sql
     作  用:更新SQL语句
     参  数:无
     返  回:执行结果
     ============================================*/
    Public Function update_sql($table,$arr,$where="1=1") {
        $temparr=Array();
        if (is_array($arr)){
            foreach($arr as $n=>$v){
                if (is_numeric(strpos($n,"=")) && is_numeric($v)){
                    $w=explode("=",$n);
                    $temparr[] = $w[0].'='.$w[1].'+'.$v;
                }else{
                    if (is_numeric($v) && substr($v,0,1)!="0"){
                        $temparr[]= "$n=$v";
                    }else{
                        $temparr[]= "$n='$v'";
                    }
                }
            }
            $sql = "update $table set ".join(",",$temparr)." where $where";
            $res=$this->mysql_sql($sql);
            if($res){
                return $res;
            }else{
                $error=$this->db()->errorInfo();
                $log=fopen(ROOT_PATH."Log//update_sql_error.log","a+");
                fwrite($log,"sql=$sql error=$error\r\n");
                fclose($log);
                return false;
            }
        }else{
            return false;
        }
    }

    /*============================================
     函数名:delete_sql
     作  用:删除SQL语句
     参  数:无
     返  回:执行结果
     ============================================*/
    Public Function delete_sql($table,$where="1=1") {
        $sql = "delete from $table where $where";
        return $this->mysql_sql($sql);
    }

    /*============================================
     函数名:execute_sql
     作  用:执行SQL语句
     参  数:无
     返  回:执行结果
     ============================================*/
    Public Function execute_sql($sql){
        $execute_sql=$this->db()->exec($sql);
        return $execute_sql;
    }

    /*============================================
     函数名:count_sql
     作  用:执行SQL语句
     参  数:无
     返  回:执行结果
     ============================================*/
    Public Function count_sql($sql){
        $result = $this->mysql_sql($sql) or die("{\"error\":\"SQL语句出错\",\"msg\":\"SQL语句出错\"}");
        return $result->rowCount();
    }
    /*============================================
    函数名:check_request
    作  用:检测字符串是否包函危险字符
    参  数:无
    返  回:错误信息
    ============================================*/
    Public Function check_request(){
        $arr=explode("|",$this->DangerousStringsArr);
        $Action=$_REQUEST;
        foreach($Action as $key=>$value){
            foreach($arr as $val){
                if ($value!='' && is_numeric(strpos(strtolower($value),$val))){
                    //记录日志
                    $log=fopen(constant("ROOT_PATH")."/Log/sql_injection.log","a+");
                    fwrite($log,"TIME[".date("Y-m-d H:i:s")."]	IP[".$this->GetIP()."]   REQUEST[".$this->json_encode($_REQUEST,JSON_UNESCAPED_UNICODE)."] USER[".$this->Session("UserName")."]	KEY[".$val."]\r\n");
                    fclose($log);
                    exit("{\"error\":\"sql error\",\"msg\":\"非法字符:$val\"}");
                }
            }
        }
    }
}

Basic.Class.php

<?php
require_once("Config.Class.php");                                       //网站配置文件
class Basic extends Config {
    function __construct() {
        parent::__construct();
        !empty($_POST) && $this->antixss($_POST);
        !empty($_GET) && $this->antixss($_GET);
        !empty($_COOKIE) && $this->antixss($_COOKIE);
        !empty($_REQUEST) && $this->antixss($_REQUEST);
    }

    /*==================================================
    函数名:antixss
    作  用:防XSS
    参  数:
    返  回:
    ==================================================*/
    Public Function antixss(&$arr) {       //'/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/',
        $ra=Array('/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/');
        if (is_array($arr)){
            foreach ($arr as $key => $value) {
                if (!is_array($value)){
                    if (!is_numeric($value)){
                        if (!get_magic_quotes_gpc()) {
                            $value=@addslashes($value);
                        }
                        $value = preg_replace($ra,'',$value);
                        $arr[$key] =  @htmlspecialchars(strip_tags($value),ENT_NOQUOTES);
                    }
                }else{
                    $this->antixss($arr[$key]);
                }
            }
        }
    }

    /*==================================================
    函数名:ChenkUrl
    作  用:判断请求来源
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    Public Function ChenkUrl(){
        $rurl=isset($_SERVER["HTTP_REFERER"])?$_SERVER["HTTP_REFERER"]:"";
        $turl=$_SERVER["SERVER_NAME"];
        $rurl=str_replace("http://","",$rurl);
        $rurl=substr($rurl,0,strlen($turl));
        if ($rurl==$turl || $rurl==""){
            return true;
        }else{
            return false;
        }
    }

    /*==================================================
    函数名:Set_Dir
    作  用:循环创建目录
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    Function Set_Dir($dir, $mode = 0755){
        if (is_dir(iconv('utf-8', 'gbk', $dir))){
            return false;
        }else{
            if(mkdir(iconv('utf-8', 'gbk', $dir),$mode,true)){
                return true;
            }else{
                return false;
            }
        }
    }

    /*==================================================
    函数名:Save_File
    作  用:保存文件
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    Function Save_File($content,$dir){
        $dir=str_replace("\\","/",$dir);
        $dir=str_replace("//","/",$dir);
        $filename=$dir;
        $arr=explode("/",$dir);
        $path=str_replace(end($arr),"",$dir);
        $path=ltrim($path,"/");
        $path=rtrim($path,"/");
        if ($path!=""){
            $this->Set_Dir($path,0);
        }
        if (file_put_contents(iconv('utf-8', 'gbk',$filename),$content)){
            return true;
        }else{
            return false;
        }
    }

    /*==================================================
    函数名:Arr_To_Json
    作  用:将数组转换为JSON
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    function Arr_To_Json($arr){
        return json_encode($arr,JSON_UNESCAPED_UNICODE);
    }

    /*==================================================
    函数名:Json_To_Arr
    作  用:将JSON转换为数组
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    function Json_To_Arr($json){
        return json_decode($json,true);
    }

    /*==================================================
    函数名:Arr_Arr
    作  用:判断两个数组是否完全相等
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    function Arr_Arr($arr1,$arr2){
        if(json_encode($arr1,JSON_UNESCAPED_UNICODE)==json_encode($arr2,JSON_UNESCAPED_UNICODE)){
            return true;
        }else{
            return false;
        }
    }

    /*==================================================
    函数名:InStr
    作  用:判断某个字符是否在字符串中
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    Public Function InStr($s,$v){
        //if (empty($s) || empty($v)){return false;}
        if (strpos($s,$v)===false){
            return false;
        }else{
            return true;
        }
    }

    /*==================================================
    函数名:utf8_strlen
    作  用:PHP获取字符串长度,中文标点或者中文汉字算一个字符
    参  数:要获取的字符串.
    返  回:字符串长度
    ==================================================*/
    Public function utf8_strlen($string = null) {
        preg_match_all("/./us", $string, $match);           // 将字符串分解为单元
        return count($match[0]);                           // 返回单元个数
    }

    /*==================================================
    函数名:array_sort
    作  用:给定的二维数组按照指定的键值进行排序
    参  数:
    返  回:
    ==================================================*/
    Public function array_sort($arr,$keys,$type='asc'){
        $keysvalue = $new_array = array();
        foreach ($arr as $k=>$v){
            $keysvalue[$k] = $v[$keys];
        }
        if($type == 'asc'){
            asort($keysvalue);
        }else{
            arsort($keysvalue);
        }
        reset($keysvalue);
        foreach ($keysvalue as $k=>$v){
            $new_array[$k] = $arr[$k];
        }
        return $new_array;
    }

    /*============================================
    函数名:Session
    作 用:操作SESSION
    参 数:当没有参数时:返回全部seesion,一个时:为读取,二个时:为设置.
    返 回:相关数据.
    ============================================*/
    Public Function Session(){
        $args = func_get_args();
        session_start();
        $key = $args[0];
        if (count($args) == 2){
            $_SESSION[$key]=$args[1];
            $re = $args[1];
        }else if(count($args) == 1){
            if (isset($_SESSION[$key])){
                $re = $_SESSION[$key];
            }else{
                $re = null;
            }
        }else{
            $re = $_SESSION;
        }
        session_write_close();
        return $re;
    }

    /*==================================================
    函数名:HtmlToStr
    作  用:HTML转字符串
    参  数:无
    返  回:成功:True 失败:False
    ==================================================*/
    Public Function HtmlToStr($str){
        if (!empty($str) && !is_numeric($str)){
            return htmlspecialchars($str);
        }else{
            return $str;
        }
    }

    /*============================================
    函数名:G
    作 用:获取提交参数
    参 数:$n:参数名
    返 回:获取的值
    ============================================*/
    static Public Function G($n,$t=null){
        $arr=$_REQUEST;
        if (array_key_exists($n,$arr)){
            $v=$arr[$n];
            if ($v==""){
                $res=$v;
            }else{
                $res=$v;
            }
            return $res;
        }else{
            return $t;
        }
    }

    /*============================================
    函数名:C
    作 用:获取Cookies
    参 数:$n:参数名
    返 回:获取的值
    ============================================*/
    Public Function C($n){
        return $_COOKIE[$n];
    }

    /*============================================
    函数名:IsArrayStr
    作 用:检查数组中是否存在该字符串
    参 数: str:被检查的字符串 Arr:被检查的数组
    返 回:成功:True 失败:False        VarType
    ============================================*/
    Public function IsArrayStr($arr,$str){
        $result = false;
        foreach($arr as $key){
            if($key==$str){
                $result = true;
                break;
            }
        }
        return $result;
    }
    /*============================================
    函数名:get_http_page
    作 用:获取网页http代码
    参 数:Url:地址 Cset:编码
    返 回:成功:网页http代码 失败:False
    ============================================*/
    Public Function get_http_page($url,$method="GET",$iconv=false,$timeout=10){
        if ($url==""){return false;}
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        if ($method=='POST'){curl_setopt($ch,CURLOPT_POST,1);}
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        curl_setopt($ch, CURLOPT_HEADER, false);               //设定是否显示头信息
        curl_setopt($ch, CURLOPT_NOBODY, false);               //设定是否输出页面内容
        $return = curl_exec($ch);
        curl_close($ch);

        if (!$return){                                         //如果使用上面方式未采集成功,则使用另一种方式采集.
            $opts = array('http' =>
                array(
                    'method'  => $method,
                    'timeout' => $timeout
                )
            );
            $return = file_get_contents($url,false,stream_context_create($opts),-1,40000);
        }
        if ($iconv){$return = iconv("utf-8","gb2312",$return);}
        return $return;
    }

    /*============================================
    函数名:get_sub_content
    作 用:截取字符串中的某部分代码
    参 数:body:内容
    返 回:截取后的字符串
    ============================================*/
    Public function get_sub_content($str,$start,$end){
        $str = explode($start, $str);
        $str = explode($end, $str[1]);
        return $str[0];
    }
    /*==================================================
    函数名:GetIP
    作 用:取得用户IP
    参 数:无
    返 回:访问者IP
    ==================================================*/
    Public Function GetIP(){
        if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown"))
            $ip = getenv("HTTP_CLIENT_IP");
        else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown"))
            $ip = getenv("REMOTE_ADDR");
        else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown"))
            $ip = $_SERVER['REMOTE_ADDR'];
        else
            $ip = "unknown";
        return($ip);
    }


    /*==================================================
    函数名:getbrowser
    作 用:获取用户浏览器版本
    参 数:
    返 回:无
    ==================================================*/
    function getbrowser() {
        global $_SERVER;
        $agent  = $_SERVER['HTTP_USER_AGENT'];
        $browser  = '';
        $browser_ver  = '';
        if (preg_match('/OmniWeb\/(v*)([^\s|;]+)/i', $agent, $regs)) {
            $browser  = 'OmniWeb';
            $browser_ver   = $regs[2];
        }
        if (preg_match('/Netscape([\d]*)\/([^\s]+)/i', $agent, $regs)) {
            $browser  = 'Netscape';
            $browser_ver   = $regs[2];
        }
        if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) {
            $browser  = 'Safari';
            $browser_ver   = $regs[1];
        }
        if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) {
            $browser  = 'Internet Explorer';
            $browser_ver   = $regs[1];
        }
        if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) {
            $browser  = 'Opera';
            $browser_ver   = $regs[1];
        }
        if (preg_match('/NetCaptor\s([^\s|;]+)/i', $agent, $regs)) {
            $browser  = '(Internet Explorer ' .$browser_ver. ') NetCaptor';
            $browser_ver   = $regs[1];
        }
        if (preg_match('/Maxthon/i', $agent, $regs)) {
            $browser  = '(Internet Explorer ' .$browser_ver. ') Maxthon';
            $browser_ver   = '';
        }
        if (preg_match('/360SE/i', $agent, $regs)) {
            $browser       = '(Internet Explorer ' .$browser_ver. ') 360SE';
            $browser_ver   = '';
        }
        if (preg_match('/SE 2.x/i', $agent, $regs)) {
            $browser       = '(Internet Explorer ' .$browser_ver. ') 搜狗';
            $browser_ver   = '';
        }
        if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) {
            $browser  = 'FireFox';
            $browser_ver   = $regs[1];
        }
        if (preg_match('/Lynx\/([^\s]+)/i', $agent, $regs)) {
            $browser  = 'Lynx';
            $browser_ver   = $regs[1];
        }
        if ($browser != '') {
            return $browser.' '.$browser_ver;
        }
        else {
            return 'Unknow browser';
        }
    }

    /*==================================================
    函数名:getplat
    作 用:获取系统版本
    参 数:
    返 回:无
    ==================================================*/
    function getplat() {
        if ($this->isMobile()){return "Mobile";}
        global $_SERVER;
        $agent = strtolower($_SERVER['HTTP_USER_AGENT']);
        $os = false;
        if (preg_match('/win/', $agent)) {
            if (preg_match('/4.9/', $agent)) {$os="Windows ME";}
            if (preg_match('/nt 5.0/', $agent)) {$os="Windows 2000";}
            if (preg_match('/nt 5.1/', $agent)) {$os="Windows XP";}
            if (preg_match('/nt 5.2/', $agent)) {$os="Windows Server 2003";}
            if (preg_match('/nt 6.0/', $agent)) {$os="Windows Vista/Server 2008";}
            if (preg_match('/nt 6.1/', $agent)) {$os="Windows 7/Server 2008 R2/Thin PC";}
            if (preg_match('/nt 6.2/', $agent)) {$os="Windows 8/Server 2012";}
            if (preg_match('/nt 6.3/', $agent)) {$os="Windows 8.1/Server 2012 R2";}
            if ($os==""){$os="Windows";}
            if (preg_match('/wow64/', $agent)) {$os.=" (64位系统)";}
        } else if (preg_match('/linux/', $agent)) {
            $os = 'Linux';
        } else if (preg_match('/unix/', $agent)) {
            $os = 'Unix';
        } else if (preg_match('/sun/', $agent) && preg_match('/os/', $agent)) {
            $os = 'SunOS';
        } else if (preg_match('/ibm/', $agent) && preg_match('/os/', $agent)) {
            $os = 'IBM OS/2';
        } else if (preg_match('/mac/', $agent) && preg_match('/pc/', $agent)) {
            $os = 'Macintosh';
        } else if (preg_match('/powerpc/', $agent)) {
            $os = 'PowerPC';
        } else if (preg_match('/aix/', $agent)) {
            $os = 'AIX';
        } else if (preg_match('/hpux/', $agent)) {
            $os = 'HPUX';
        } else if (preg_match('/netbsd/', $agent)) {
            $os = 'NetBSD';
        } else if (preg_match('/bsd/', $agent)) {
            $os = 'BSD';
        } else if (preg_match('/osf1/', $agent)) {
            $os = 'OSF1';
        } else if (preg_match('/irix/', $agent)) {
            $os = 'IRIX';
        } else if (preg_match('/freebsd/', $agent)) {
            $os = 'FreeBSD';
        } else if (preg_match('/teleport/', $agent)) {
            $os = 'teleport';
        } else if (preg_match('/flashget/', $agent)) {
            $os = 'flashget';
        } else if (preg_match('/webzip/', $agent)) {
            $os = 'webzip';
        } else if (preg_match('/offline/', $agent)) {
            $os = 'offline';
        } else{
            $os = $agent;
        }
        return $os;
    }

    /*==================================================
    函数名:isMobile
    作 用:判断是否为手机登陆
    参 数:
    返 回:无
    ==================================================*/
    function isMobile() {
        if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])){return true;}                                                                                                                          // 如果有HTTP_X_WAP_PROFILE则一定是移动设备
        if (isset ($_SERVER['HTTP_VIA'])) {return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;}                                                                                      //如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息 找不到为flase,否则为true
        if (isset ($_SERVER['HTTP_USER_AGENT'])) {                                                                                                                                             //判断手机发送的客户端标志,兼容性有待提高
            $clientkeywords = array ('nokia','sony','ericsson','mot','samsung','htc','sgh','lg','sharp','sie-','philips','panasonic','alcatel','lenovo','iphone','ipod','blackberry','meizu','android','netfront','symbian','ucweb','windowsce','palm','operamini','operamobi','openwave','nexusone','cldc','midp','wap','mobile');
            if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {return true;}                                                              // 从HTTP_USER_AGENT中查找手机浏览器的关键字
        }
        //协议法,因为有可能不准确,放到最后判断
        if (isset ($_SERVER['HTTP_ACCEPT'])) {
            // 如果只支持wml并且不支持html那一定是移动设备 如果支持wml和html但是wml在html之前则是移动设备
            if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {return true;}
        }
        return false;
    }

    /*==================================================
    函数名:is_class_obj
    作 用:检查CLASS里是否存在对象
    参 数:classname:类名,obj:要查找的对象名
    返 回:存在:true,否则:false
    ==================================================*/
    Public Function is_class_obj($classname,$obj){
        if ($obj==""){return true;}
        $result = false;
        $class_methods = get_class_methods("$classname");
        foreach ($class_methods as $method_name) {
            if($method_name==$obj){
                $result = true;
                break;
            }
        }
        return $result;
    }

    /*==================================================
    函数名:DateDiff
    作 用:
    参 数:
    返 回:
    ==================================================*/
    Public Function DateDiff($part, $begin, $end){
        $diff = strtotime($end) - strtotime($begin);
        $retval = null;
        switch($part){
            case "y": $retval = bcdiv($diff, (60 * 60 * 24 * 365)); break;
            case "m": $retval = bcdiv($diff, (60 * 60 * 24 * 30)); break;
            case "w": $retval = bcdiv($diff, (60 * 60 * 24 * 7)); break;
            case "d": $retval = bcdiv($diff, (60 * 60 * 24)); break;
            case "h": $retval = bcdiv($diff, (60 * 60)); break;
            case "n": $retval = bcdiv($diff, 60); break;
            case "s": $retval = $diff; break;
        }
        return intval($retval);
    }

    /*==================================================
    函数名:getBetweenTwoDate
    作 用:
    参 数:
    返 回:
    ==================================================*/
    Public Function getBetweenTwoDate($date1,$date2){
        $Date_List_a1=explode("-",explode(" ",$date1)[0]);
        $Date_List_a2=explode("-",explode(" ",$date2)[0]);
        $d1=mktime(0,0,0,$Date_List_a1[1],$Date_List_a1[2],$Date_List_a1[0]);
        $d2=mktime(0,0,0,$Date_List_a2[1],$Date_List_a2[2],$Date_List_a2[0]);
        $Days=round(($d1-$d2)/3600/24);
        return $Days;
    }

    /*==================================================
    函数名:DateDiff
    作 用:
    参 数:
    返 回:
    ==================================================*/
    Public Function DateAdd($part, $n, $date,$t=0){
        $val = null;
        switch($part){
            case "y": $val = date("Y-m-d H:i:s", strtotime($date ." +$n year")); break;
            case "m": $val = date("Y-m-d H:i:s", strtotime($date ." +$n month")); break;
            case "w": $val = date("Y-m-d H:i:s", strtotime($date ." +$n week")); break;
            case "d": $val = date("Y-m-d H:i:s", strtotime($date ." +$n day")); break;
            case "h": $val = date("Y-m-d H:i:s", strtotime($date ." +$n hour")); break;
            case "n": $val = date("Y-m-d H:i:s", strtotime($date ." +$n minute")); break;
            case "s": $val = date("Y-m-d H:i:s", strtotime($date ." +$n second")); break;
        }
        if ($t==1){
            return explode(" ",$val)[0];
        }else{
            return $val;
        }
    }

    /*==================================================
    函数名:is_date
    作 用:
    参 数:
    返 回:
    ==================================================*/
    Public Function is_date($date){
        if(preg_match("/^[0-9]{4}(\-|\/)[0-9]{1,2}(\\1)[0-9]{1,2}(|\s+[0-9]{1,2}(|:[0-9]{1,2}(|:[0-9]{1,2})))$/",$date)) {
            return true;
        }else{
            return false;
        }
    }


    /*==================================================
    函数名:strToHex
    作 用:加密函数
    参 数:
    返 回:
    ==================================================*/
    Public Function strToHex($string,$pass=""){
        $hex="";
        for ($i=0;$i<strlen($string);$i++){
            $hex.=dechex(ord($string[$i]));
        }
        $passstr="";
        for ($i=0;$i<strlen($pass);$i++){
            $passstr.=dechex(ord($pass[$i]));
        }

        return strtoupper($hex.$passstr);
    }

    /*==================================================
    函数名:HexToStr
    作 用:公共函数定义
    参 数:
    返 回:
    ==================================================*/
    Public Function HexToStr($hex,$pass=""){
        $string="";
        for ($i=0;$i<strlen($hex)-1;$i+=2){$string.=chr(hexdec($hex[$i].$hex[$i+1]));}
        if ($pass!=""){$string=str_replace($pass,"",$string);}
        return $string;
    }

    /*==================================================
    函数名:DelDir
    作 用:删除目录即当前文件夹
    参 数:
    返 回:
    ==================================================*/
    Public Function DelDir($dir) {
        $dh=opendir($dir);                            //先删除目录下的文件
        while ( ($file=readdir($dh))   !== false ) {
            if($file!="." && $file!="..") {
                $fullpath=$dir."/".$file;
                if(!is_dir($fullpath)) {
                    @unlink($fullpath);
                } else {
                    @rmdir($fullpath);//“@”抑制住错误显示
                }
            }
        }
        closedir($dh);
        if(@rmdir($dir)) {                         //删除当前文件夹
            return true;
        } else {
            return false;
        }
    }

    /*==================================================
    函数名:unescape
    作 用:unescape解码
    参 数:
    返 回:
    ==================================================*/
    Public function unescape($str){
        $ret = '';
        $len = strlen($str);
        for ($i = 0; $i < $len; $i++){
            if ($str[$i] == '%' && $str[$i+1] == 'u'){
                $val = hexdec(substr($str, $i+2, 4));
                if ($val < 0x7f){
                    $ret .= chr($val);
                }else if($val < 0x800){
                    $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
                }else {
                    $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
                }
                $i += 5;
            }else if ($str[$i] == '%'){
                $ret .= urldecode(substr($str, $i, 3));
                $i += 2;
            }
            else{
                $ret .= $str[$i];
            }
        }
        return $ret;
    }
}

Config.Class.php

<?php
class Config{
    Public $mysql_server_name      ='127.0.0.1';                   //localhost
    Public $mysql_username         ='root';                        //登陆账户
    Public $mysql_password         ='root';                        //连接密码
    Public $mysql_database         ='easy';                        //数据库名字
    static Public $DefaultModel = 'Error';
    static Public $DefaultAction = 'Index';
    static public $cur_db;
    function __construct() {

    }
}

functions.php

<?php
/**
 * 获取和设置语言定义(不区分大小写)
 * @param string|array $name 语言变量
 * @param mixed $value 语言值或者变量
 * @return mixed
 */
function L($name=null, $value=null) {
    static $_lang = array();
    // 空参数返回所有定义
    if (empty($name))
        return $_lang;
    // 判断语言获取(或设置)
    // 若不存在,直接返回全大写$name
    if (is_string($name)) {
        $name   =   strtoupper($name);
        if (is_null($value)){
            return isset($_lang[$name]) ? $_lang[$name] : $name;
        }elseif(is_array($value)){
            // 支持变量
            $replace = array_keys($value);
            foreach($replace as &$v){
                $v = '{$'.$v.'}';
            }
            return str_replace($replace,$value,isset($_lang[$name]) ? $_lang[$name] : $name);
        }
        $_lang[$name] = $value; // 语言定义
        return null;
    }
    // 批量定义
    if (is_array($name))
        $_lang = array_merge($_lang, array_change_key_case($name, CASE_UPPER));
    return null;
}

使用示例
Novel.class.php

<?
Class Novel extends Common{
    function __construct() {
        parent::__construct();
        header("Content-type: text/html; charset=utf-8");
    }
    Public Function Index(){
    }
    public function htmtocode($content){
        $content = str_replace("\r\n","\\r\\n",$content);
        return $content;
    }
    public Function Show($result="\"{}\"",$resultName="result",$msg="\"ok\"",$msgName = "msg"){
        $jsonp = $this->G("cb");
        if ($jsonp == null){
            echo "{\"$msgName\": $msg,\"$resultName\":$result}";
        }else{
            echo  $this->htmtocode($jsonp."("."{\"$msgName\": $msg,\"$resultName\":$result}".")");
        }
    }
    //http://localhost/?Model=Novel&Action=NovelList
    //小说列表
    Public Function NovelList(){
        $page = $this->G("page",1);
        $pageSize = $this->G("pageSize",10);
        $begin = ($page-1) * $pageSize;
        $sql_s = "SELECT novel.id,novel.`name`,novel.intro,GROUP_CONCAT(novel_config.id) as config_id FROM novel INNER JOIN novel_config ON novel.id = novel_config.novel_id  GROUP BY novel.id LIMIT $begin, $pageSize";
        $this->Show($this->json_select_sql_all($sql_s),"novel_list");
    }
    //http://localhost/?Model=Novel&Action=ChapterList&novel_id=1&novel_config_id=1
    //小说章节列表
    Public Function ChapterList(){
        $novel_id = $this->G("novel_id");
        $novel_config_id = $this->G("novel_config_id",null);
        $where = array('novel_id'=>$novel_id);
        if ($novel_config_id){
            $where["novel_config_id"] = $novel_config_id;
        }
        $pageIndex = $this->G("pageIndex",0);
        $page = $this->G("page",1);
        if ($page != 0 && $pageIndex == 0) {
            $pageIndex = $page ;
        }
        $pageSize = $this->G("pageSize",10);
        $count = $this->G("count",0);
        $this->Show($this->json_select_sql_table("novel_list",$where,$pageIndex,$pageSize,array("id","novel_id","content_index","title","novel_config_id"),$count,"content_index"),"chapter_list");
    }
    //http://localhost/?Model=Novel&Action=ChapterContent&id=7315
    //小说章节内容
    Public Function ChapterContent(){
        $id = $this->G("id");
        if ($id){
            $where = array();
            $where['id'] = $id;
            $this->Show($this->json_select_sql_table("novel_list",$where),"chapter_content");
        }else{
            $novel_id = $this->G("novel_id");
            $novel_config_id = $this->G("novel_config_id");
            $content_index = $this->G("content_index");
            if ($novel_id && $novel_config_id && $content_index){
                $where = array();
                $where['novel_id'] = $novel_id;
                $where['novel_config_id'] = $novel_config_id;
                $where['content_index'] = $content_index;
                $this->Show($this->json_select_sql_table("novel_list",$where),"chapter_content");
            }
        }
    }
    //?Model=Novel&Action=NovelListLastInfo&ids=1,2,3&config_ids=1,2,3
    public Function NovelListLastInfo(){
        $ids = $this->G("ids");
        $config_ids = $this->G("config_ids");
        $sql = "select id,novel_id,content_index,title,novel_config_id from (select id,novel_id,content_index,title,novel_config_id from  novel_list where novel_id in ($ids) and novel_config_id in ($config_ids) order by content_index desc )  a  group by novel_id";
        $this->Show($this->json_select_sql_all($sql));
    }
    Public Function EasySpider(){
        //system(ROOT_PATH."/Debug/EasySpider.exe");
    }
    Public Function NoveCover(){
        $novel_id = $this->G("novel_id");
        $id = $this->G("id");
        if (!$novel_id){
            $novel_id = $id;
        }
        $sql = "SELECT IF( (SELECT COUNT(*)  FROM novel_img where novel_id = '$novel_id') > 0  ,(SELECT img from novel_img where novel_id = '$novel_id'),(SELECT img from novel_img where novel_id = '0')) as img";
        header('Content-type: image/jpg');
        $res = $this->mysql_sql($sql);
        if($res->rowCount()>0){
            while( ($row=$res->fetch(PDO::FETCH_ASSOC) ) !== false){
                echo ($row['img']);
                break;
            }
        }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值