[原创]SS FrameWork For PHP 4.0 (专注于extjs和flex的PHP MVC核心框架)
这是我以前写的PHP MVC 框架核心, 麻雀虽小五脏俱全,完整代码详见附件 SS FrameWork For PHP 4.0.rar该框架主要用于php与extjs(json),flex(xml)的交互操作, 简单而实用,不像zend 那么臃肿(zend的功能你能用到20%已经很好了)
由于采用了ant, build前请下载JRE, 并设置好JAVA_HOME,CLASSPATH和PATH(或者放到jre目录), 然后点击install.bat,最后将build目录就是你要找的目录
======================================
几个核心代码:
index.php
<?phprequire( '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
<?phpdefine('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:
<?phpdefined('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;}}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
<?phpdefined('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
<?phpdefined('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 staticfunction 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; } publicstatic 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(){}}
页:
[1]