ネイティブ PHP 構文を使用してページをレンダリングし、ウィジェット機能を提供します。
- /**
- * 設定パラメータの取得と設定はバッチ定義をサポートします
- * $key が連想配列の場合、設定は K-V の形式で書き込まれます
- * $key が数値インデックス配列の場合、対応する設定配列が返されます
- * @param string |array $key 設定変数
- * @param array|null $value 設定値
- * @return array|null
- */
- function C($key,$value=null){
- static $_config = array();
- $args = func_num_args();
- if( $args == 1){
- if(is_string($key)){ //受信キーが文字列の場合
- return isset($_config[$key])?$_config[$key]:null;
- }
- if(is_array($key)){
- if(array_keys($key) !== range(0, count($key) - 1)){ //受信キーが連想配列の場合
- $_config = array_merge ( $_config, $key);
- }else{
- $ret = array();
- foreach ($key as $k) {
- $ret[$k] = isset($_config[$k])?$_config [ $k]:null;
- }
- return $ret;
- }
- }
- }else{
- if(is_string($key)){
- $_config[$key] = $value;
- }else{
- halt( '渡されたパラメータが正しくありません');
- }
- }
- return null;
- }
- /**
- * ウィジェットを呼び出す
- * @param string $name ウィジェット名
- * @param array $data ウィジェットに渡される変数リスト、キーは変数名、値は変数値です
- * @return void
- */
- function W($name, $data = array()){
- $fullName = $name. 'ウィジェット';
- if(!class_exists($fullName)){
- halt('ウィジェット '.$name.' は存在しません');
- }
- $widget = new $fullName();
- $widget-> invoke ($data);
- }
- /**
- * プログラムの実行を終了します
- * @param string $str 終了理由
- * @param bool $display コールスタックを表示するかどうか、デフォルトでは表示されません
- * @return void
- */
- function halt($str, $display=false){
- Log::fatal($str.' debug_backtrace:'.var_export(debug_backtrace(), true ));
- header("Content-Type:text/html; charset=utf-8");
- if($display){
- echo "
"; - debug_print_backtrace();
- echo "< / pre>";
- }
- echo $str;
- exit;
- }
- /**
- * データベース インスタンスを取得します
- * @return DB
- */
- function M(){
- $dbConf = C(array('DB_HOST','DB_PORT','DB_USER ' ,'DB_PWD','DB_NAME','DB_CHARSET'));
- return DB::getInstance($dbConf);
- }
- /**
- * ファイルが存在する場合は、それを含めます
- * @param string $path ファイルパス
- * @return void
- */
- function includeIfExist($path){
- if(file_exists ( $path)){
- include $path;
- }
- }
- /**
- * 一般管理カテゴリ
- */
- class SinglePHP {
- /**
- * コントローラー
- * @var string
- */
- private $c;
- /**
- * アクション
- * @var string
- * /
- private $a;
- /**
- * シングルトン
- * @var SinglePHP
- */
- private static $_instance;
- /**
- * コンストラクター、初期化構成
- * @param array $conf
- */
- private function __construct($conf){
- C($conf);
- }
- private function __clone(){}
- /**
- * シングルトンを取得します
- * @param array $conf
- * @return SinglePHP
- */
- public static function getInstance($conf){
- if(!(self::$_instance instanceof self)){
- self::$_instance = new self( $ conf);
- }
- return self::$_instance;
- }
- /**
- * アプリケーションインスタンスを実行します
- * @access public
- * @return void
- */
- public function run(){
- if(C('USE_SESSION') == true){
- session_start() ;
- }
- C('APP_FULL_PATH', getcwd().'/'.C('APP_PATH').'/');
- includeIfExist( C('APP_FULL_PATH').'/common.php');
- $ pathMod = C('PATH_MOD');
- $pathMod = empty($pathMod)?'NORMAL':$pathMod;
- spl_autoload_register(array('SinglePHP', 'autoload'));
- if(strcmp(strtoupper($pathMod) ) ,'NORMAL') === 0 || !isset($_SERVER['PATH_INFO'])){
- $this->c = isset($_GET['c'])?$_GET['c' ] :'インデックス';
- $this->a = isset($_GET['a'])?$_GET['a']:'インデックス';
- }else{
- $pathInfo = isset($_SERVER[ ' PATH_INFO'])?$_SERVER['PATH_INFO']:'';
- $pathInfoArr =explode('/',trim($pathInfo,'/'));
- if(isset($pathInfoArr[0]) && $ pathInfoArr[0] !== ''){
- $this->c = $pathInfoArr[0];
- }else{
- $this->c = 'インデックス';
- }
- if(isset($ pathInfoArr [1])){
- $this->a = $pathInfoArr[1];
- }else{
- $this->a = 'インデックス';
- }
- }
- if(!class_exists($this- > ;c.'コントローラー')){
- halt('コントローラー'.$this->c.'存在しません');
- }
- $controllerClass = $this->c.'コントローラー';
- $ controller = new $controllerClass();
- if(!method_exists($controller, $this->a.'Action')){
- halt('method'.$this->a.'存在しません') ;
- }
- call_user_func(array($controller,$this->a.'Action'));
- }
- /**
- * 自動読み込み機能
- * @param string $class クラス名
- */
- パブリック静的関数 autoload($class){
- if(substr( $class ,-10)=='Controller'){
- includeIfExist(C('APP_FULL_PATH').'/Controller/'.$class.'.class.php');
- }elseif(substr($class,- 6) =='ウィジェット'){
- includeIfExist(C('APP_FULL_PATH').'/Widget/'.$class.'.class.php');
- }else{
- includeIfExist(C('APP_FULL_PATH').'/Lib/'.$class.'.class.php');
- }
- }
- }
- /**
- * コントローラークラス
- */
- クラス コントローラー {
- / **
- * インスタンスを表示
- * @var View
- */
- プライベート $_view;
- /**
- * コンストラクター、ビューインスタンスの初期化、フックの呼び出し
- */
- パブリック関数 __construct(){
- $this->_view = new View();
- $this->_init() ;
- }
- /**
- * プリフック
- */
- 保護関数 _init(){}
- /**
- * テンプレートをレンダリングして出力します
- * @param null|string $tpl テンプレート ファイル パス
- * パラメータは、App/View/file に対する相対パスであり、index/index などのサフィックス名は含まれません
- * Ifパラメータが空の場合、デフォルトで $controller/$action.php が使用されます
- * パラメータに「/」が含まれていない場合、デフォルトで $controller/$tpl が使用されます
- * @return void
- */
- 保護関数 display($tpl=''){
- if($tpl === ' '){
- $trace = debug_backtrace();
- $controller = substr($trace[1]['class'], 0, -10);
- $action = substr($trace[1]['function'] , 0 , -6);
- $tpl = $controller 。 '/' 。 $action;
- }elseif(strpos($tpl, '/') === false){
- $trace = debug_backtrace();
- $controller = substr($trace[1]['class'], 0, - 10);
- $tpl = $controller 。 '/' 。 $tpl;
- }
- $this->_view->display($tpl);
- }
- /**
- * ビューエンジンのテンプレート変数を設定します
- * @param string $name テンプレートで使用する変数名
- * @parammixed $value テンプレート内の変数名に対応する値
- * @return void
- */
- 保護関数 assign($name,$value){
- $this-> _view->assign($name,$value);
- }
- /**
- * データをjson形式でブラウザに出力し、コードの実行を停止します
- * @param array $data 出力するデータ
- */
- 保護関数 ajaxReturn($data){
- echo json_encode($data);
- exit;
- }
- /**
- * 指定したURLにリダイレクトします
- * @param string $url リダイレクト先のURL
- * @param void
- */
- 保護された関数 redirect($url){
- header("Location: $url");
- exit;
- }
- }
- /**
- *クラスを見る
- */
- class View {
- /**
- * ファイルディレクトリを表示
- * @var string
- */
- private $_tplDir;
- /**
- * ファイルパスを表示
- * @var string
- */
- private $_viewPath;
- /**
- * 変数リストを表示
- * @var array
- */
- private $_data = array();
- /**
- * tplInclude の変数リスト
- * @var array
- */
- private static $tmpData;
- /**
- * @パラメータ文字列 $tplDir
- */
- public function __construct($tplDir=''){
- if($tplDir == ''){
- $this->_tplDir = './' .C('APP_PATH').'/View/';
- }else{
- $this->_tplDir = $tplDir;
- }
- }
- /**
- * ビューエンジンのテンプレート変数を設定します
- * @param string $key テンプレートで使用する変数名
- * @parammixed $value テンプレート内の変数名に対応する値
- * @return void
- */
- public function assign($key, $value) {
- $this->_data[$key] = $value;
- }
- /**
- * テンプレートをレンダリングして出力します
- * @param null|string $tplFile テンプレート ファイル パス、App/View/file への相対パス、index/index などのサフィックス名は含まれません
- * @return void
- */
- public function display($tplFile) {
- $this->_viewPath = $this- > _tplDir 。 $tplFile 。 '.php';
- unset($tplFile);
- extract($this->_data);
- include $this->_viewPath;
- }
- /**
- * テンプレート ファイルに他のテンプレートを含めるために使用されます
- * @param string $path View ディレクトリへの相対パス
- * @param array $data サブテンプレートに渡される変数リスト、キーは変数名、値は変数値
- * @return void
- */
- public static function tplInclude($ path, $data=array()){
- self::$tmpData = array(
- 'path' => C('APP_FULL_PATH') . '/View/' . $path . '.php',
- 'data ' => $data,
- );
- unset($path);
- unset($data);
- extract(self::$tmpData['data']);
- include self::$tmpData['path' ];
- }
- }
- /**
- * Widgetクラス
- * 使用する場合は、このクラスを継承し、invokeメソッドをオーバーライドし、invokeメソッド内でdisplayを呼び出す必要があります
- */
- クラス ウィジェット {
- /**
- * インスタンスを表示
- * @var View
- */
- protected $_view;
- /**
- * ウィジェット名
- * @var string
- */
- protected $_widgetName;
- /* *
- * コンストラクター、ビューインスタンスを初期化します
- */
- パブリック関数 __construct(){
- $this->_widgetName = get_class($this);
- $dir = C('APP_FULL_PATH') 。 '/Widget/Tpl/';
- $this->_view = new View($dir);
- }
- /**
- * 処理ロジック
- * @param 混合 $data パラメーター
- */
- public function invoke($data){}
- /**
- * テンプレートをレンダリングします
- * @param string $tpl テンプレート パス、空の場合は、クラス名をテンプレート名として使用します
- */
- 保護された関数 display($tpl=''){
- if($tpl == ''){
- $tpl = $this->_widgetName;
- }
- $this->_view->display ($tpl);
- }
- /**
- * ビューエンジンのテンプレート変数を設定します
- * @param string $name テンプレートで使用する変数名
- * @parammixed $value テンプレート内の変数名に対応する値
- * @return void
- */
- 保護関数 assign($name,$value){
- $this->_view->assign($name,$value);
- }
- }
- /**
- * データベース操作クラス
- * 使用方法:
- * DB::getInstance($conf)->query('select * from table');
- * $conf は、次のキーを含む必要がある連想配列です。
- * DB_HOST DB_USER DB_PWD DB_NAME
- * DB_PORT と DB_CHARSET を使用してポートとエンコーディングを指定できます。デフォルトは 3306 と utf8 です。*/
- クラス DB {
- /**
- * データベースリンク
- * @var リソース
- */
- private $_db;
- /**
- * 最後の SQL を保存します
- * @var string
- */
- private $_lastSql;
- /**
- * 最後の SQL ステートメントによって影響を受ける行数
- * @var int
- */
- private $_rows;
- /**
- * 最後の SQL 実行でエラーが発生しました
- * @var string
- */
- private $_error;
- /**
- * インスタンス配列
- * @var 配列
- */
- private static $_instance = array();
- /**
- * コンストラクター
- * @param array $dbConf 構成配列
- */
- private 関数__construct($dbConf){
- if(!isset($dbConf['DB_CHARSET'])){
- $dbConf['DB_CHARSET'] = 'utf8';
- }
- $this->_db = mysql_connect($dbConf[ 'DB_HOST'].':'.$dbConf['DB_PORT'],$dbConf['DB_USER'],$dbConf['DB_PWD']);
- if($this->_db === false){
- halt(mysql_error());
- }
- $selectDb = mysql_select_db($dbConf['DB_NAME'],$this->_db);
- if($selectDb === false){
- halt(mysql_error());
- }
- mysql_set_charset($dbConf['DB_CHARSET']);
- }
- プライベート関数 __clone(){}
- /**
- * DBクラスを取得
- * @param array $dbConf設定配列
- * @return DB
- */
- 静的パブリック関数 getInstance($dbConf){
- if(!isset($ dbConf['DB_PORT'])){
- $dbConf['DB_PORT'] = '3306';
- }
- $key = $dbConf['DB_HOST'].':'.$dbConf['DB_PORT'];
- if (!isset(self::$_instance[$key]) || !(self::$_instance[$key]instanceofself)){
- self::$_instance[$key] = 新しい self($dbConf);
- }
- return self::$_instance[$key];
- }
- /**
- * エスケープされた文字列
- * @param string $str エスケープされる文字列
- * @return string エスケープされた文字列
- */
- public functionescape($str){
- return mysql_real_escape_string($str, $this->_db);
- }
- /**
- * クエリ、select ステートメントに使用されます
- * @param string $sql クエリ対象の SQL
- * @return bool|array クエリが成功した場合は、対応する配列を返し、失敗した場合は false を返します
- */
- パブリック関数クエリ($sql){
- $this->_rows = 0;
- $this->_error = '';
- $this->_lastSql = $sql ;
- $this->logSql();
- $res = mysql_query($sql,$this->_db);
- if($res === false){
- $this->_error = mysql_error($ this->_db);
- $this->logError();
- return false;
- }else{
- $this->_rows = mysql_num_rows($res);
- $result = array();
- if( $this->_rows >0) {
- while($row = mysql_fetch_array($res, MYSQL_ASSOC)){
- $result[] = $row;
- }
- mysql_data_seek($res,0);
- }
- return $result;
- }
- }
- /**
- * クエリ、insert/update/delete ステートメントに使用されます
- * @param string $sql クエリ対象の SQL
- * @return bool|int クエリが成功した場合は影響を受けたレコードの数を返し、失敗した場合は返されます偽
- */
- public functionexecute($sql) {
- $this->_rows = 0;
- $this->_error = '';
- $this- >_lastSql = $sql;
- $this->logSql();
- $result = mysql_query($sql, $this->_db) ;
- if ( false === $result) {
- $this-> ;_error = mysql_error($this->_db);
- $this->logError();
- return false;
- } else {
- $this->_rows = mysql_affected_rows($this->_db);
- return $this->_rows;
- }
- }
- /**
- * 最後のクエリによって影響を受けたレコードの数を取得します
- * @return int 影響を受けたレコードの数
- */
- public function getRows(){
- return $this->_rows;
- }
- /**
- * 最後の挿入後に生成された自動インクリメント ID を取得します
- * @return int 自動インクリメント ID
- */
- public function getInsertId() {
- return mysql_insert_id($this->_db);
- }
- /**
- * 最後のクエリの SQL を取得します
- * @return string sql
- */
- public function getLastSql(){
- return $this->_lastSql;
- }
- /**
- * 最後のクエリのエラー情報を取得します
- * @return string エラー情報
- */
- パブリック関数 getError(){
- return $this->_error;
- }
- /**
- * SQLをファイルに記録します
- */
- プライベート関数 logSql(){
- Log::sql($this-> _lastSql);
- }
- /**
- * エラーログをファイルに記録します
- */
- プライベート関数 logError(){
- $str = '[SQL ERR]'.$this->_error.' SQL:'.$this->_lastSql;
- Log::warn($str);
- }
- }
- /**
- * ログクラス
- * 使用方法: Log::fatal('error msg');
- * 保存パスは App/Log で、日ごとに保存されます
- * Fatal と警告は .log.wf ファイルに記録されます
- */
- class Log{
- /**
- * ログ、SAE 環境をサポート
- * @param string $msg ログの内容
- * @param string $level ログレベル
- * @param bool $wf エラーログかどうか
- */
- public static function write($msg, $level='DEBUG', $wf=false){
- if(function_exists('sae_debug')){ //如果是SAE,则使用sae_debug関数数打日志
- $msg = "[{$ level}]".$msg;
- sae_set_display_errors(false);
- sae_debug(trim($msg));
- sae_set_display_errors(true);
- }else{
- $msg = date('[ Y-m-d H:i:s ]' )."[{$level}]".$msg."rn";
- $logPath = C('APP_FULL_PATH').'/Log/'.date('Ymd').'.log';
- if($wf){
- $logPath . = '.wf';
- }
- file_put_contents($logPath, $msg, FILE_APPEND);
- }
- }
- /**
- * 致命的なログを出力します
- * @param string $msg ログ情報
- */
- public static function fat($msg){
- self::write($ msg, 'FATAL', true);
- }
- /**
- * 警告ログを出力します
- * @param string $msg ログ情報
- */
- public static function warn($msg){
- self::write($msg, 'WARN', true);
- }
- / **
- * 通知ログを印刷します
- * @param string $msg ログ情報
- */
- パブリック静的関数の通知($msg){
- self::write($msg, 'NOTICE');
- }
- /**
- * デバッグログを出力します
- * @param string $msg ログ情報
- */
- パブリック静的関数のデバッグ($msg) ){
- self::write($msg, 'DEBUG');
- }
- /**
- * SQL ログを出力します
- * @param string $msg ログ情報
- */
- パブリック静的関数 sql($msg){
- self::write($msg, 'SQL') ;
- }
- }
- /**
- * ExtException クラス、追加の例外情報を記録します
- */
- class ExtException extends Exception{
- /**
- * @var 配列
- */
- protected $extra;
- /**
- * @param string $message
- * @param array $extra
- * @param int $code
- * @param null $previous
- */
- public function __construct($message = "", $extra = array(), $code = 0, $previous = null){
- $this->extra = $extra;
- parent::__construct($message, $code, $previous);
- }
- /**
- * 追加の例外情報を取得します
- * @return array
- */
- public function getExtra(){
- return $this->extra;
- }
- }
复制代
|