/book/SpeedPHP/Core/spView.php
PHP | 297 lines | 248 code | 6 blank | 43 comment | 25 complexity | 79e70c648d6dc6b26fe3307a78466742 MD5 | raw file
Possible License(s): GPL-3.0, LGPL-3.0
- <?php
- /////////////////////////////////////////////////////////////////
- // SpeedPHP??PHP??, Copyright (C) 2008 - 2010 SpeedPHP.com //
- /////////////////////////////////////////////////////////////////
-
- /**
- * spView ?????
- */
- class spView {
- /**
- * ??????
- */
- public $engine = null;
- /**
- * ???????
- */
- public $displayed = FALSE;
-
- /**
- * ?????????????????
- */
- public function __construct()
- {
- if(FALSE == $GLOBALS['G_SP']['view']['enabled'])return FALSE;
- if(FALSE != $GLOBALS['G_SP']['view']['auto_ob_start'])ob_start();
- $this->engine = spClass($GLOBALS['G_SP']['view']['engine_name'],null,$GLOBALS['G_SP']['view']['engine_path']);
- if( $GLOBALS['G_SP']['view']['config'] && is_array($GLOBALS['G_SP']['view']['config']) ){
- $engine_vars = get_class_vars(get_class($this->engine));
- foreach( $GLOBALS['G_SP']['view']['config'] as $key => $value ){
- if( array_key_exists($key,$engine_vars) )$this->engine->{$key} = $value;
- }
- }
- if( !empty($GLOBALS['G_SP']['sp_app_id']) && isset($this->engine->compile_id) )$this->engine->compile_id = $GLOBALS['G_SP']['sp_app_id'];
-
- if( empty($this->engine->no_compile_dir) ){
- @memcache_init();
- $path_compile="saemc://templates_c/";
- $path_cache="saemc://cached";
- $this->engine->compile_dir = $path_compile;
- $this->engine->cache_dir = $path_cache;
- }
- spAddViewFunction('T', array( 'spView', '__template_T'));
- spAddViewFunction('spUrl', array( 'spView', '__template_spUrl'));
- }
-
- /**
- * ????
- * @param tplname ??????
- */
- public function display($tplname)
- {
- try {
- $this->addfuncs();
- $this->displayed = TRUE;
- if($GLOBALS['G_SP']['view']['debugging'] && SP_DEBUG)$this->engine->debugging = TRUE;
- $this->engine->display($tplname);
- } catch (Exception $e) {
- spError( $GLOBALS['G_SP']['view']['engine_name']. ' Error: '.$e->getMessage() );
- }
- }
-
- /**
- * ??????????
- */
- public function addfuncs()
- {
- if( is_array($GLOBALS['G_SP']["view_registered_functions"]) ){
- foreach( $GLOBALS['G_SP']["view_registered_functions"] as $alias => $func ){
- if( is_array($func) && !is_object($func[0]) )$func = array(spClass($func[0]),$func[1]);
- $this->engine->registerPlugin("function", $alias, $func);
- unset($GLOBALS['G_SP']["view_registered_functions"][$alias]);
- }
- }
- }
- /**
- * ??spUrl?????spUrl????????
- * @param params ?????
- */
- public function __template_spUrl($params)
- {
- $controller = $GLOBALS['G_SP']["default_controller"];
- $action = $GLOBALS['G_SP']["default_action"];
- $args = array();
- $anchor = null;
- foreach($params as $key => $param){
- if( $key == $GLOBALS['G_SP']["url_controller"] ){
- $controller = $param;
- }elseif( $key == $GLOBALS['G_SP']["url_action"] ){
- $action = $param;
- }elseif( $key == 'anchor' ){
- $anchor = $param;
- }else{
- $args[$key] = $param;
- }
- }
- return spUrl($controller, $action, $args, $anchor);
- }
- /**
- * ??T?????T????????
- * @param params ?????
- */
- public function __template_T($params)
- {
- return T($params['w']);
- }
- }
-
- /**
- * spHtml
- * ??HTML???
- */
- class spHtml
- {
- private $spurls = null;
- /**
- * ????????
- *
- * @param spurl spUrl???
- * @param alias_url ??HTML???????????alias_url????????????????????????HTML???
- * @param update_mode ???????2??????????
- * 0??????
- * 1??????
- */
- public function make($spurl, $alias_url = null, $update_mode = 2)
- {
- if(1 == spAccess('r','sp_html_making')){$this->spurls[] = array($spurl, $alias_url); return;}
- @list($controller, $action, $args, $anchor) = $spurl;
- if( $url_item = spHtml::getUrl($controller, $action, $args, $anchor, TRUE) ){
- @list($baseuri, $realfile) = $url_item;$update_mode = 1;
- }else{
- $file_root_name = ( '' == $GLOBALS['G_SP']['html']['file_root_name'] ) ?
- '' : $GLOBALS['G_SP']['html']['file_root_name'].'/';
- if( null == $alias_url ){
- $filedir = $file_root_name .date('Y/n/d').'/';
- $filename = substr(time(),3,10).substr(mt_rand(100000, substr(time(),3,10)),4).".html";
- }else{
- $filedir = $file_root_name.dirname($alias_url) . '/';
- $filename = basename($alias_url);
- }
- $baseuri = rtrim(dirname($GLOBALS['G_SP']['url']["url_path_base"]), '/\\')."/".$filedir.$filename;
- $realfile = APP_PATH."/".$filedir.$filename;
- }
- if( 0 == $update_mode or 2 == $update_mode )spHtml::setUrl($spurl, $baseuri, $realfile);
- if( 1 == $update_mode or 2 == $update_mode ){
- $remoteurl = 'http://'.$_SERVER["SERVER_NAME"].':'.$_SERVER['SERVER_PORT'].
- '/'.ltrim(spUrl($controller, $action, $args, $anchor, TRUE), '/\\');
- $cachedata = file_get_contents($remoteurl);
- if( FALSE === $cachedata ){
- $cachedata = $this->curl_get_file_contents($remoteurl);
- if( FALSE === $cachedata )spError("????????????????<br />1. spUrl?????????<a href='{$remoteurl}' target='_blank'>??????</a>?<br />2. ??php.ini?allow_url_fopen?On?<br />3. ??????????APACHE/PHP?????<br />4. ????CURL????");
- }
- __mkdirs(dirname($realfile));
- file_put_contents($realfile, $cachedata);
- }
- }
-
- /**
- * ?file_get_contents?????????CURL???????????
- * @param url ????
- */
- function curl_get_file_contents($url)
- {
- if(!function_exists('curl_init'))return FALSE;
- $c = curl_init();
- curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
- curl_setopt($c, CURLOPT_URL, $url);
- $contents = curl_exec($c);
- curl_close($c);
- if (FALSE === $contents)return FALSE;
- return $contents;
- }
-
- /**
- * ????????
- * @param spurls ??????????make()?????
- */
- public function makeAll($spurls)
- {
- foreach( $spurls as $single ){
- list($spurl, $alias_url) = $single;
- $this->make($spurl, $alias_url, 0);
- }
- foreach( $spurls as $single ){
- list($spurl, $alias_url) = $single;
- $this->make($spurl, $alias_url, 1);
- }
- }
-
- public function start(){spAccess('w','sp_html_making',1);$this->spurls = null;}
- public function commit(){spAccess('c','sp_html_making');$this->makeAll($this->spurls);}
-
- /**
- * ??url?????????????????????
- * @param controller ???????????'default_controller'
- * @param action ??????????'default_action'
- * @param args ??????????
- * @param anchor ????
- * @param force_no_check ????????????
- */
- public function getUrl($controller = null, $action = null, $args = null, $anchor = null, $force_no_check = FALSE)
- {
- if( $url_list = spAccess('r', 'sp_url_list') ){
- $url_list = explode("\n",$url_list);
- $args_en = !empty($args) ? json_encode($args) : "";
- $url_input = "{$controller}|{$action}|{$args_en}|$anchor|";
- foreach( $url_list as $url ){
- if( substr($url,0,strlen($url_input)) == $url_input ){
- $url_item = explode("|",substr($url,strlen($url_input)));
- if( TRUE == $GLOBALS['G_SP']['html']['safe_check_file_exists'] && TRUE != $force_no_check ){
- if( !is_readable($url_item[1]) )return FALSE;
- }
- return $url_item;
- }
- }
- }
- return FALSE;
- }
-
- /**
- * ??url???????make???????spUrl????????????
- *
- * @param spurl spUrl???
- * @param baseuri URL???????HTML??????
- *
- */
- public function setUrl($spurl, $baseuri, $realfile)
- {
- @list($controller, $action, $args, $anchor) = $spurl;
- $this->clear($controller, $action, $args, $anchor, FALSE);
- $args = !empty($args) ? json_encode($args) : '';
- $url_input = "{$controller}|{$action}|{$args}|{$anchor}|{$baseuri}|{$realfile}";
- if( $url_list = spAccess('r', 'sp_url_list') ){
- spAccess('w', 'sp_url_list', $url_list."\n".$url_input);
- }else{
- spAccess('w', 'sp_url_list', $url_input);
- }
- }
-
- /**
- * ??????
- *
- * @param controller ????HTML????????
- * @param action ????HTML????????????????????????HTML??
- * ?????action?????action???HTML??
- *
- * @param args ???????????????????????HTML??
- * ?????args???????????args????HTML??
- *
- * @param anchor ??????????????????????HTML??
- * ?????anchor????????????anchor???HTML??
- *
- * @param delete_file ?????????FALSE?????????????????????????
- */
- public function clear($controller, $action = null, $args = FALSE, $anchor = '', $delete_file = TRUE)
- {
- if( $url_list = spAccess('r', 'sp_url_list') ){
- $url_list = explode("\n",$url_list);$re_url_list = array();
- if( null == $action ){
- $prep = "{$controller}|";
- }elseif( FALSE === $args ){
- $prep = "{$controller}|{$action}|";
- }else{
- $args = !empty($args) ? json_encode($args) : '';
- $prep = "{$controller}|{$action}|{$args}|{$anchor}|";
- }
- foreach( $url_list as $url ){
- if( substr($url,0,strlen($prep)) == $prep ){
- $url_tmp = explode("|",$url);$realfile = $url_tmp[5];
- if( TRUE == $delete_file )@unlink($realfile);
- }else{
- $re_url_list[] = $url;
- }
- }
- spAccess('w', 'sp_url_list', join("\n", $re_url_list));
- }
- }
-
-
- /**
- * ????????
- *
- * @param delete_file ?????????FALSH?????????????????????????
- */
- public function clearAll($delete_file = FALSE)
- {
- if( TRUE == $delete_file ){
- if( $url_list = spAccess('r', 'sp_url_list') ){
- $url_list = explode("\n",$url_list);
- foreach( $url_list as $url ){
- $url_tmp = explode("|",$url);$realfile = $url_tmp[5];
- @unlink($realfile);
- }
- }
- }
- spAccess('c', 'sp_url_list');
- }
- }