[原创]SS FrameWork For PHP 3.0 (专注于extjs和flex的PHP MVC核心框架)_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > [原创]SS FrameWork For PHP 3.0 (专注于extjs和flex的PHP MVC核心框架)

[原创]SS FrameWork For PHP 3.0 (专注于extjs和flex的PHP MVC核心框架)

 2011/9/20 12:58:50  skanion  http://skanion.iteye.com  我要评论(0)
  • 摘要:这是我以前写的PHPMVC框架核心,麻雀虽小五脏俱全,完整代码详见附件SSFrameWorkForPHP3.0.rar该框架主要用于php与extjs(json),flex(xml)的交互操作,简单而实用,不像zend那么臃肿(zend的功能你能用到20%已经很好了)由于采用了ant,build前请下载JRE,并设置好JAVA_HOME,CLASSPATH和PATH(或者放到jre目录),然后点击install.bat
  • 标签:MVC 原创 for PHP Framework
这是我以前写的PHP MVC 框架核心, 麻雀虽小五脏俱全,完整代码详见附件 SS FrameWork For PHP 3.0.rar

该框架主要用于php与extjs(json),flex(xml)的交互操作, 简单而实用,不像zend 那么臃肿(zend的功能你能用到20%已经很好了)

由于采用了ant, build前请下载JRE, 并设置好JAVA_HOME,CLASSPATH和PATH(或者放到jre目录), 然后点击install.bat,最后将build目录就是你要找的目录

======================================
几个核心代码:

index.php
<?php
require( 'define.php' );

/**
 * SS FrameWork 3.0 For PHP
 * @author 影枫.爪哇 <mail@shadowsnow.com>
 * @copyright 2009-2011 skanion.iteye.com
 * @version 3.0
 * @since 2011.09.14
 */
$ctrl=isset($_REQUEST['c']) ? trim($_REQUEST['c']) : 'index';
$action=isset($_REQUEST['a']) ? ($_REQUEST['a']) : 'index';
ss_conf('db');
ss_conf('web');
ss_sys('db');
//db::getInstance()->query('SET NAMES UTF8');
ss_sys('id');
ss_sys('ip');
ss_sys('chklogin');
ss_sys('cache');
chklogin::init();
ip::setIp();
ss_model($ctrl);
ss_call_ctrl($ctrl,$action);


define.php
<?php
define('SS', 'ShadowSnow');
define('ACCESS', 'Access Declined.');
define('DS', DIRECTORY_SEPARATOR);
define('WEBROOT', dirname(__FILE__) .DS);
define('CLASSES',WEBROOT . 'classes' .DS);
define('FUN', CLASSES . 'function' .DS);
define('INC', CLASSES . 'inc' .DS);
define('MODEL', CLASSES . 'model' .DS);
define('SYS', CLASSES . 'system' .DS);
define('CONF', WEBROOT . 'config' .DS);
define('CTRL', WEBROOT . 'controller' .DS);
define('VIEW', WEBROOT . 'view' .DS);
define('CACHE', WEBROOT . 'cache' .DS);
define('PUB', WEBROOT . 'public' .DS);
define('IMGAE', PUB . 'image' .DS);
define('JS', PUB . 'js' .DS);
define('CSS', PUB . 'css' .DS);
define('PAGE', PUB . 'page' .DS);
define('SWF', PUB . 'swf' .DS);
define('URL', 'http://'. $_SERVER['SERVER_NAME']. '/');
define('JsonURL', 'http://'. $_SERVER['SERVER_NAME']. '/index.php');
//date_default_timezone_set("Etc/GMT-8");
date_default_timezone_set('Asia/Shanghai');
//echo date_default_timezone_get();
error_reporting(E_ALL);
ini_set('display_errors','On'); 
require( FUN. 'autoload.fun.php');
ss_conf('chk_lang');
ss_conf('lang_' . chk_lang::$lang);
ss_fun('main');
ss_fun('filter');
ss_sys('ss');
session_start();


db.sys.php:
<?php

defined('SS') or exit('Access Declined.');

class db_base
{

	var $host = "";
	var $database = "";
	var $user = "";
	var $password = "";
	var $port = "";
	var $socket = "";
	var $record = array();
	var $insert_id;
	var $errno = 0;
	var $error = "";
	var $type = "mysql";
	var $sql  = "";
	var $link = false;
	var $result = false;
	var $locked = false;
	var $helper_db;
	var $select = array();
	var $from = '';
	var $join = array() ;
	var $on = array();
	var $where = array();
	var $orwhere = array();
	var $order = array();
	var $limit = '';
	var $pconnect = false;
	var $prepared_statement = false;


	private static $Singleton;
	
	public function __construct()
	{
		$this->set_config();
	}

  public static function GetInstance()
  {
      if(!(self::$Singleton instanceof db)){
         self::$Singleton=new db();
      }
      return self::$Singleton;
  }

	public function set_config()
	{
		if (class_exists('db_config')){
			$this->type      = db_config::$db_type;	
			$this->host      = db_config::$db_host;
			$this->database  = db_config::$db_name;
			$this->user      = db_config::$db_user;
			$this->password  = db_config::$db_pass;			
			$this->port      = db_config::$db_port;
			$this->socket    = db_config::$db_socket;			
		}
	}

	public function set_parameters($type, $host, $database, $user, $pass, $port=3306, $socket='')
	{
		$this->type = $type;
		$this->host = $host;
		$this->database = $database;
		$this->user = $user;
		$this->password = $pass;
		$this->port = $port;
		$this->socket = $socket;
	}

	public function connect(){}

	function free() {}
	
	function clear() 
	{
		$this->select = array();
		$this->from = '';
		$this->join = array();
		$this->on = array();
		$this->where = array();
		$this->orwhere = array();
		$this->order = array();	
		$this->limit = '';
	}

	public function selects($select=array())
	{
		if(!is_array($select)) $select=array($select);
		if (count($select) > 0)	$this->select = $select;
	}
	
	public function froms($from= '')
	{
		if ($from) $this->from = $from;
	}
	
	public function joins($join=array())
	{
		if(!is_array($join)) $join=array($join);
		if (count($join) > 0) $this->join = $join;		
	}
	
	public function ons($on=array())
	{
		if(!is_array($on)) $on=array($on);
		if (count($on) > 0) $this->on = $on;			
	}
	
	public function wheres($where=array())
	{
		if(!is_array($where)) $where=array($where);
		if (count($where) > 0) $this->where = $where;			
	}

	public function orwheres($orwhere=array())
	{
		if(!is_array($orwhere)) $orwhere=array($orwhere);
		if (count($orwhere) > 0) $this->orwhere = $orwhere;			
	}	
	
	public function orders($order=array())
	{
		if(!is_array($order)) $order=array($order);
		if (count($order) > 0) $this->order = $order;			
	}

	public function limits($limit='')
	{
		if($limit)	$this->limit=	$limit . '';
	}	

	public function getQuerySql()
	{

			$sql = '';
			if(count($this->select) > 0){
				$sql .= "SELECT " . implode(',', $this->select);	
			}
			else{
				$sql .= "SELECT * ";
			}	
			
			if($this->from){
				$sql .= " FROM ". $this->from ." ";		
			}
			else{
				return false;
			}						
			
			if( count($this->on)> 0){
					$ons = "";
					$i = 0;
					foreach ($this->on as $key => $value){
						$sql .= " LEFT JOIN ".$this->join[$i]." ON  " .$key. " = " .$value. " ";
						$i++;
					}
			}					
			

			$isWhere = false;
			if(count($this->where) > 0){
					$isWhere = true;
				  $sql .= " WHERE  ";
				  $ands = '';
					foreach ($this->where as $key => $value){
						if (!is_numeric($key)){
							$ands .= " AND " .$key. " = '" .$value. "' ";
						}
						else{
							$ands .= " AND " .$value. " ";
						}
					}
					if (substr($ands,0,4) == ' AND') $ands = substr($ands,4);
					$sql .= $ands;
			}
						
			if(count($this->orwhere) > 0){
				  if(!$isWhere) $sql .= " WHERE ";
				  $ors = '';
					foreach ($this->orwhere as $key => $value){
						if (!is_numeric($key)){
							$ors .= " OR " .$key. " = '" .$value. "' ";
						}
						else{
							$ors .= " OR " .$value. " ";
						}
					}
					if (substr($ors,0,3) == ' OR' && !$isWhere) $ors = substr($ors,3);
					$sql .= $ors;							
			}
			
			if(count($this->order) > 0){
				$sql .= " ORDER BY " . implode(',', $this->order);	
			}		
			
			if($this->limit){
				$sql .= ' LIMIT '.$this->limit .' ';
			}		
			
			return $sql;			
	}

	public function querySql($sql){}

	public function query($sql = '')
	{
		$this->connect();
		$this->free();
		if ($sql){
				$this->result = $this->querySql($sql);
				if(!$this->result) $this->result = false;
				$this->sql = $sql;
				return $this->result;
		}
		else{
					$sql = $this->getQuerySql();
					$this->result = $this->querySql($sql);	
					if(!$this->result) $this->result = false;
					$this->clear();	
					$this->sql = $sql;
					return $this->result;
		}
	}

	public function querys($sql = '')
	{
		return $this->query($sql);
	}

	public function next_record($type = MYSQL_ASSOC) {}


	public function lock($table, $mode = "write") 
	{
		$query = "lock tables ";
		if(is_array($table)) {
			while(list($key,$value) = each($table)) {
				if(is_int($key)) $key = $mode;
				if(strpos($value, ",")) {
					$query .= str_replace(",", " $key, ", $value) . " $key, ";
				} else {
					$query .= "$value $key, ";
				}
			}
			$query = substr($query, 0, -2);
		} elseif(strpos($table, ",")) {
			$query .= str_replace(",", " $mode, ", $table) . " $mode";
		} else {
			$query .= "$table $mode";
		}
		if(!$this->query($query)) {
			$this->halt("lock() failed.");
			return false;
		}
		$this->locked = true;
		return true;
	}

	public function unlock() 
	{
		$this->locked = false;
		if(!$this->query("unlock tables")) {
			$this->halt("unlock() failed.");
			return false;
		}
		return true;
	}

	public function f($name) 
	{
		if (isset($this->record[$name])) {
			return $this->record[$name];
		}
		else{
			return false;
		}
	}

	public function p($name)
	{
		if (isset($this->record[$name])) {
			print $this->record[$name];
		}
	}

	public function nextid($table) 
	{
		$sql = "select " .$table. "_id from " .$table. " order by " .$table. "_id desc";
		if(!$this->query($sql)) {
			$this->halt('query failed in nextid: '.$sql);
			return 0;
		}
		
		if(!$this->next_record()) {
			return 1;
		}
		else {
			return $this->f($table. "_id") + 1;
		}
	}

	public function insert_id() {}


	public function num_rows() {}

	public function affected_rows() {}
	
	public function num_fields() {}


	public function update_row($table, $index, $fields)
	{
		$this->connect();
		if(!is_array($fields))
		{
			$this->halt('Invalid update row called');
			return false;
		}
		if(!is_array($index))
		{
			$index = array($index);
		}

		$field_types='';
		$index_types='';
		$count=0;
		$indexes=array();

		foreach($fields as $key => $value)
  		{
  			if(!in_array($key, $index))
  			{
  				if (!is_numeric($key)){
  					$updates[] = "`$key`='".$this->escape($value)."'";  				
  				}
  				else{
  					$updates[] = $value;    				
  				}
  				
  			}
  		}
	  	if(isset($updates))
	  	{
	  		$sql = "UPDATE `$table` SET ".implode(',',$updates)." WHERE ";	  		
	
				$indexes=array();
				foreach($index as $subindex)
				{
					$indexes[]="`$subindex`='".$this->escape($fields[$subindex])."'";
				}
				$sql .= implode(' AND ', $indexes);
				$this->query($sql);
				return $this->affected_rows();
	  	}
			
		return false;
	}

	public function insert_row($table, $fields,$replace='')
	{
		$this->connect();
		if(!is_array($fields))
		{
			$this->halt('Invalid insert row called');
			return false;
		}
		
		foreach($fields as $key => $value)
		{
			$field_names[] = $key;
			if(is_numeric($value)){
				$field_values[] = $value;
			}
			else{
				$field_values[] = "'".$value."'";
			}
			//$field_values[] = $this->escape($value);
		}
		if(isset($field_names))
		{
				$sql = $replace ? 'REPLACE' : 'INSERT';
				$sql .= " INTO `$table` (`".implode('`,`', $field_names)."`) VALUES ";
	  		$sql .=	"(".implode(",", $field_values).")";
	  		//$sql .=	"('".implode("','", $field_values)."')";
	  		//tip($sql);
				$this->query($sql);
				return $this->affected_rows();
		}else
		{
			$this->halt('Error insering row');
		}
		return false;
	}

	public function delete_row($table, $where = array())
	{
		$this->connect();
		if(!is_array($where)) $where=array($where);
		if(count($where) > 0){
			$where_ = '';
			foreach ($where as $key => $value){
				if (!is_numeric($key)){
					$where_ .= " AND " .$key. " = '" .$value. "' ";
				}
				else{
					$where_ .= " AND " .$value. " ";
				}
			}
			if (substr($where_,0,4) == ' AND') $where_ = substr($where_,4);
			$where_ = ' WHERE  '. $where_;
		}
		
		$sql  = "DELETE FROM " .$table;
		$sql .= $where_;
		$this->query($sql);
		return $this->affected_rows();
	}

	public function replace_row($table, $fields)
	{
		return $this->insert_row($table, $fields, 'REPLACE');
	}

	public function escape($value, $trim=true){}


	protected function set_log($level, $message)
	{
			$messages = str_split($message, 500);
			for ($i = 0; $i < count($messages); $i ++) {
				syslog($level, $messages[$i]);
			}
	}

	protected function halt($msg)
	 {

		if ($this->locked) {
			$this->unlock();
		}

		$this->set_log(LOG_DEBUG, sprintf("Database Error: [ %s ]\n\nMySQL Error: [ %s (%s) ]",
		$msg,
		$this->errno,
		$this->error));

		tip(sprintf("Database Error: [ %s ]\n\nMySQL Error: [ %s (%s) ]",	
		$msg,
		$this->errno, 
		$this->error));
	}

	public function close(){}
	

	public function found_rows()
	{
		if(!isset($this->helper_db)){
			$this->helper_db = new db();
		}
		$this->helper_db->query("SELECT FOUND_ROWS() as found;");
		$this->helper_db->next_record();
		return $this->helper_db->f('found');
	}


	public function table_exists($table_name)
	{
		if(!isset($this->tables)){
			$this->tables=array();
			$this->query('SHOW TABLES');
			while($r=$this->next_record(MYSQL_NUM)){
				$this->tables[]=$r[0];
			}
		}
		return in_array($table_name, $this->tables);
	}
}

if (class_exists('db_config')){
	if(db_config::$db_type == 'mysqli' && function_exists('mysqli_close')){
		ss_sys('mysqli');	
	}
	else{
		ss_sys('mysql');	
	}
}



autoload.fun.php
<?php

	defined('SS') or exit('Access Declined.');
  
  function ss_ctrl($controller)   
  {   
  	    if(!empty($controller)){
	        $file = CTRL . $controller . '.ctrl.php';
	        if (is_file($file)) {   
	            require_once($file);   
	        }
        }   
  }   
  
  function ss_sys($class)   
  {   
  	
        $file = SYS . $class . '.sys.php';
        if (is_file($file)) {   
            require_once($file);   
        }   
  }   
  
  function ss_model($class)   
  {   
        $file = MODEL . $class . '.class.php';
        if (is_file($file)) {   
            require_once($file);   
        }   
  }   
  
  function ss_fun($function)   
  {   
        $file = FUN . $function . '.fun.php';
        if (is_file($file)) {   
            require_once($file);   
        }   
  }   
  
  function ss_inc($inc)   
  {   
        $file = INC . $inc . '.inc.php';
        if (is_file($file)) {   
            require_once($file);   
        }   
  }    
  
  function ss_view($view)   
  {   
	      $file = VIEW . $view . '.view.php';
	      if (is_file($file)) {   
	          require_once($file);   
	      }
 
  }   
  
  function ss_conf($config)   
  {   
	      $file = CONF . $config . '.conf.php';
	      if (is_file($file)) {   
	          require_once($file);   
	      }
 
  }  
  
   function ss_cache($cache)   
  {   
	      $file = CACHE . $cache . '.cache.php';
	      if (is_file($file)) {   
	          require_once($file); 	      }

  } 
  
  function ss_swf($swf)   
  {   
	      $file = SWF . $swf . '.php';
	      if (is_file($file)) {   
	          require_once($file);   
	      }
  }    
  
  function ss_call_ctrl($ctrl= 'index',$action = 'index')   
  {   
  		ss_sys('ctrlbase');
  		$action .= 'Action';
			ss_ctrl($ctrl);
			$ctrlClass = $ctrl.'Ctrl';
			if (class_exists($ctrlClass)){
				$reflectionClass=new ReflectionClass($ctrlClass); 
				call_user_func($ctrlClass.'::init');
				if ($reflectionClass->hasMethod($action)){
					$reflectionMethod=$reflectionClass->getMethod($action);  
					if($reflectionMethod->isStatic()){
						call_user_func($ctrlClass.'::'.$action);
					}
					else{
						call_user_func(array($ctrlClass,$action)); 
					}
				}				
				
			}

  }     
 
  spl_autoload_register('ss_model');



cache.sys.php
<?php

defined('SS') or exit('Access Declined.');
define('CACHE_TIME',db_config::$db_cache);
define('CACHE_CLEAR_TIME',db_config::$db_cache_clear);
define('CACHE_CLEAR_SWITCH',db_config::$db_cache_switch);


class cache
{
   private static $Singleton;
   public static function GetInstance()
   {
      if(!(self::$Singleton instanceof self)){
         self::$Singleton=new self();
      }
      return self::$Singleton;
   }
   
   public static  function get_cache_name($name,$minute = false)
   {
   		if (!$minute) {
   			$minute = CACHE_TIME;
   		}
   		$hour = date('Ymd-H');
   		$minute = ceil(intval(date('i')) / $minute) * $minute;
			return CACHE. $name . '[' . $hour .$minute .'].cache.php';
   }
  
   public static function auto($name, $data,$minute = false)
   {
		$content = self::get($name,$minute);
		if($content){
			return $content;
		}
		else{
			return self::set($name,$data,$minute);
		}		  
   }  
  
  
   public static function get($name,$minute = false)
   {
	   	if (CACHE_CLEAR_SWITCH == 'on'){
	   		self::clear();
	   		$cache = self::get_cache_name($name,$minute);
				if (is_file($cache)){
					return unserialize(file_get_contents($cache));			
				}
	   	}
			return false;
   }

      
   public  static function set($name, $data,$minute = false) 
   {
   		if (CACHE_CLEAR_SWITCH == 'on'){
			  $cache = self::get_cache_name($name,$minute);
	  		$file = @fopen($cache, 'w');
	  		@fwrite($file,serialize($data));
		    @fclose($file); 
   		}
	    return $data;
    }      
      
   public static function clear() 
   {
		$cache = CACHE. 'log.cache.php';
		$time = time();
		if(is_file($cache)){
			if ( ($time - intval(file_get_contents($cache))) < CACHE_CLEAR_TIME* 60 ){
				return true;
			}
		}

		self::deldir(CACHE);
	  $file = @fopen($cache, 'w');
	  @fwrite($file, $time);
		@fclose($file);	
		return false;				
   } 
   
   public static function del($name,$minute = false)
   {
		 @unlink(self::get_cache_name($name,$minute));
	 } 	    
   
   
   public static function deldir($dir)
   {
		 self::delfile($dir);
	 } 
   
   public static function delfile($dir) 
   {

			if (is_dir($dir)) {
					if ($dh = @opendir($dir)) {
							while (($file = @readdir($dh)) !== false) {
							if ($file!="." && $file!=".." && $file!="log.cache.php") {
								  $fullpath=$dir."/".$file;
									if(!is_dir($fullpath)) {
									    @unlink($fullpath);
									          
									} else {
									    self::delfile($fullpath);
									    @rmdir($fullpath);
									}
							}
					}
					@closedir($dh);
					}
			} 

	}
   
   private function __clone(){}
   public function __construct(){}
}

  • SS_FrameWork_For_PHP_3.0.rar (2.1 MB)
  • 下载次数: 77
发表评论
用户名: 匿名