PageRenderTime 58ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/code/core/sociax/functions.php

http://thinksns-2.googlecode.com/
PHP | 1068 lines | 757 code | 76 blank | 235 comment | 154 complexity | 8f6579d60e7094a69f485bf7e403f661 MD5 | raw file
Possible License(s): LGPL-2.1
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2009 http://thinkphp.cn All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
  8. // +----------------------------------------------------------------------
  9. // | Author: liu21st <liu21st@gmail.com>
  10. // +----------------------------------------------------------------------
  11. // $Id$
  12. /**
  13. +------------------------------------------------------------------------------
  14. * Think?????
  15. +------------------------------------------------------------------------------
  16. * @category Think
  17. * @package Common
  18. * @author liu21st <liu21st@gmail.com>
  19. * @version $Id$
  20. +------------------------------------------------------------------------------
  21. */
  22. // URL?? ????????? 2010-2-5 ??
  23. function U($url,$params=false,$redirect=false,$suffix=true) {
  24. //????
  25. if(false==strpos($url,'/')){
  26. $url .='//';
  27. }
  28. //??????
  29. $urls = explode('/',$url);
  30. $app = ($urls[0]) ? $urls[0] : APP_NAME;
  31. $mod = ($urls[1]) ? $urls[1] : 'Index';
  32. $act = ($urls[2]) ? $urls[2] : 'index';
  33. //??????
  34. $site_url = SITE_URL.'/index.php?'.C('VAR_APP').'='.$app.'&'.C('VAR_MODULE').'='.$mod.'&'.C('VAR_ACTION').'='.$act;
  35. //??????
  36. if($params){
  37. if(is_array($params)){
  38. $params = http_build_query($params);
  39. $params = urldecode($params);
  40. }
  41. $params = str_replace('&amp;','&',$params);
  42. $site_url .= '&'.$params;
  43. }
  44. //?????Rewrite
  45. if(C('URL_ROUTER_ON')){
  46. //????
  47. $router_ruler = C('router');
  48. $router_key = $app.'/'.ucfirst($mod).'/'.$act;
  49. //????
  50. if(isset($router_ruler[$router_key])){
  51. //??????
  52. $site_url = SITE_URL.'/'.$router_ruler[$router_key];
  53. //??????
  54. if($params){
  55. //????URL????
  56. parse_str($params,$r);
  57. foreach($r as $k=>$v){
  58. if(strpos($site_url,'['.$k.']')){
  59. $site_url = str_replace('['.$k.']',$v,$site_url);
  60. }else{
  61. $lr[$k] = $v;
  62. }
  63. }
  64. //??????
  65. if(is_array($lr) && count($lr)>0){
  66. $site_url .= '?'.http_build_query($lr);
  67. }
  68. }
  69. }
  70. }
  71. //???????
  72. if($redirect){
  73. redirect($site_url);
  74. }else{
  75. return $site_url;
  76. }
  77. }
  78. /**
  79. +----------------------------------------------------------
  80. * ?????????
  81. * type
  82. * =0 ?Java?????C???
  83. * =1 ?C?????Java???
  84. +----------------------------------------------------------
  85. * @access protected
  86. +----------------------------------------------------------
  87. * @param string $name ???
  88. * @param integer $type ????
  89. +----------------------------------------------------------
  90. * @return string
  91. +----------------------------------------------------------
  92. */
  93. function parse_name($name,$type=0) {
  94. if($type) {
  95. return ucfirst(preg_replace("/_([a-zA-Z])/e", "strtoupper('\\1')", $name));
  96. }else{
  97. $name = preg_replace("/[A-Z]/", "_\\0", $name);
  98. return strtolower(trim($name, "_"));
  99. }
  100. }
  101. // ????
  102. function halt($error) {
  103. if(IS_CLI) exit ($error);
  104. $e = array();
  105. if(C('APP_DEBUG')){
  106. //???????????
  107. if(!is_array($error)) {
  108. $trace = debug_backtrace();
  109. $e['message'] = $error;
  110. $e['file'] = $trace[0]['file'];
  111. $e['class'] = $trace[0]['class'];
  112. $e['function'] = $trace[0]['function'];
  113. $e['line'] = $trace[0]['line'];
  114. $traceInfo='';
  115. $time = date("y-m-d H:i:m");
  116. foreach($trace as $t)
  117. {
  118. $traceInfo .= '['.$time.'] '.$t['file'].' ('.$t['line'].') ';
  119. $traceInfo .= $t['class'].$t['type'].$t['function'].'(';
  120. $traceInfo .= implode(', ', $t['args']);
  121. $traceInfo .=")<br/>";
  122. }
  123. $e['trace'] = $traceInfo;
  124. }else {
  125. $e = $error;
  126. }
  127. // ????????
  128. include C('TMPL_EXCEPTION_FILE');
  129. }
  130. else
  131. {
  132. //?????????
  133. $error_page = C('ERROR_PAGE');
  134. if(!empty($error_page)){
  135. redirect($error_page);
  136. }else {
  137. if(C('SHOW_ERROR_MSG'))
  138. $e['message'] = is_array($error)?$error['message']:$error;
  139. else
  140. $e['message'] = C('ERROR_MESSAGE');
  141. // ????????
  142. include C('TMPL_EXCEPTION_FILE');
  143. }
  144. }
  145. exit;
  146. }
  147. // URL???
  148. function redirect($url,$time=0,$msg='') {
  149. //??URL????
  150. $url = str_replace(array("\n", "\r"), '', $url);
  151. if(empty($msg))
  152. $msg = "????{$time}????????{$url}?";
  153. if (!headers_sent()) {
  154. // redirect
  155. if(0===$time) {
  156. header("Location: ".$url);
  157. }else {
  158. header("refresh:{$time};url={$url}");
  159. // ???????????
  160. $str = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />';
  161. $msg = $str . $msg;
  162. echo($msg);
  163. }
  164. exit();
  165. }else {
  166. $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
  167. if($time!=0)
  168. $str .= $msg;
  169. exit($str);
  170. }
  171. }
  172. // ???????
  173. function throw_exception($msg,$type='ThinkException',$code=0)
  174. {
  175. if(IS_CLI) exit($msg);
  176. if(class_exists($type,false))
  177. throw new $type($msg,$code,true);
  178. else
  179. halt($msg); // ????????????????
  180. }
  181. // ??????
  182. function debug_start($label='')
  183. {
  184. $GLOBALS[$label]['_beginTime'] = microtime(TRUE);
  185. if ( MEMORY_LIMIT_ON ) $GLOBALS[$label]['_beginMem'] = memory_get_usage();
  186. }
  187. // ?????????????????????
  188. function debug_end($label='')
  189. {
  190. $GLOBALS[$label]['_endTime'] = microtime(TRUE);
  191. echo '<div style="text-align:center;width:100%">Process '.$label.': Times '.number_format($GLOBALS[$label]['_endTime']-$GLOBALS[$label]['_beginTime'],6).'s ';
  192. if ( MEMORY_LIMIT_ON ) {
  193. $GLOBALS[$label]['_endMem'] = memory_get_usage();
  194. echo ' Memories '.number_format(($GLOBALS[$label]['_endMem']-$GLOBALS[$label]['_beginMem'])/1024).' k';
  195. }
  196. echo '</div>';
  197. }
  198. // ??????????
  199. function dump($var, $echo=true,$label=null, $strict=true)
  200. {
  201. $label = ($label===null) ? '' : rtrim($label) . ' ';
  202. if(!$strict) {
  203. if (ini_get('html_errors')) {
  204. $output = print_r($var, true);
  205. $output = '<pre style="text-align:left">'.$label.htmlspecialchars($output,ENT_QUOTES).'</pre>';
  206. } else {
  207. $output = $label . " : " . print_r($var, true);
  208. }
  209. }else {
  210. ob_start();
  211. var_dump($var);
  212. $output = ob_get_clean();
  213. if(!extension_loaded('xdebug')) {
  214. $output = preg_replace("/\]\=\>\n(\s+)/m", "] => ", $output);
  215. $output = '<pre style="text-align:left">'. $label. htmlspecialchars($output, ENT_QUOTES). '</pre>';
  216. }
  217. }
  218. if ($echo) {
  219. echo($output);
  220. return null;
  221. }else
  222. return $output;
  223. }
  224. // ?????? ??????????
  225. function get_instance_of($name,$method='',$args=array())
  226. {
  227. static $_instance = array();
  228. $identify = empty($args)?$name.$method:$name.$method.to_guid_string($args);
  229. if (!isset($_instance[$identify])) {
  230. if(class_exists($name)){
  231. $o = new $name();
  232. if(method_exists($o,$method)){
  233. if(!empty($args)) {
  234. $_instance[$identify] = call_user_func_array(array(&$o, $method), $args);
  235. }else {
  236. $_instance[$identify] = $o->$method();
  237. }
  238. }
  239. else
  240. $_instance[$identify] = $o;
  241. }
  242. else
  243. halt(L('_CLASS_NOT_EXIST_').':'.$name);
  244. }
  245. return $_instance[$identify];
  246. }
  247. /**
  248. +----------------------------------------------------------
  249. * ??????ThinkPHP?????????model?Action??
  250. * ????????????
  251. +----------------------------------------------------------
  252. * @param string $name ????
  253. +----------------------------------------------------------
  254. * @return void
  255. +----------------------------------------------------------
  256. */
  257. function __autoload($name)
  258. {
  259. // ??????????
  260. if(alias_import($name)) return ;
  261. // ?????????Actioon??Model?
  262. if(substr($name,-5)=="Model") {
  263. require_cache(LIB_PATH.'Model/'.$name.'.class.php');
  264. }elseif(substr($name,-6)=="Action"){
  265. require_cache(LIB_PATH.'Action/'.$name.'.class.php');
  266. }else {
  267. // ????????????????
  268. if(C('APP_AUTOLOAD_PATH')) {
  269. $paths = explode(',',C('APP_AUTOLOAD_PATH'));
  270. foreach ($paths as $path){
  271. if(import($path.$name)) {
  272. // ??????????
  273. return ;
  274. }
  275. }
  276. }
  277. }
  278. return ;
  279. }
  280. // ???require_once
  281. function require_cache($filename)
  282. {
  283. static $_importFiles = array();
  284. $filename = realpath($filename);
  285. if (!isset($_importFiles[$filename])) {
  286. if(file_exists_case($filename)){
  287. require $filename;
  288. $_importFiles[$filename] = true;
  289. }
  290. else
  291. {
  292. $_importFiles[$filename] = false;
  293. }
  294. }
  295. return $_importFiles[$filename];
  296. }
  297. // ????????????
  298. function file_exists_case($filename) {
  299. if(is_file($filename)) {
  300. if(IS_WIN && C('APP_FILE_CASE')) {
  301. if(basename(realpath($filename)) != basename($filename))
  302. return false;
  303. }
  304. return true;
  305. }
  306. return false;
  307. }
  308. /**
  309. +----------------------------------------------------------
  310. * ??????? ?java?Import
  311. * ????????
  312. +----------------------------------------------------------
  313. * @param string $class ?????????
  314. * @param string $baseUrl ????
  315. * @param string $ext ????????
  316. +----------------------------------------------------------
  317. * @return boolen
  318. +----------------------------------------------------------
  319. */
  320. function import($class,$baseUrl = '',$ext='.class.php')
  321. {
  322. static $_file = array();
  323. static $_class = array();
  324. $class = str_replace(array('.','#'), array('/','.'), $class);
  325. if('' === $baseUrl && false === strpos($class,'/')) {
  326. // ??????
  327. return alias_import($class);
  328. } //echo('<br>'.$class.$baseUrl);
  329. if(isset($_file[$class.$baseUrl]))
  330. return true;
  331. else
  332. $_file[$class.$baseUrl] = true;
  333. $class_strut = explode("/",$class);
  334. if(empty($baseUrl)) {
  335. if('@'==$class_strut[0] || APP_NAME == $class_strut[0] ) {
  336. //??????????
  337. $baseUrl = dirname(LIB_PATH);
  338. $class = str_replace(array(APP_NAME.'/','@/'),LIB_DIR.'/',$class);
  339. }elseif(in_array(strtolower($class_strut[0]),array('think','org','com'))) {
  340. //??ThinkPHP?????????
  341. // think ????? org ??????? com ??????
  342. $baseUrl = THINK_PATH.'/Lib/';
  343. }else {
  344. // ??????????
  345. $class = substr_replace($class, '', 0,strlen($class_strut[0])+1);
  346. $baseUrl = APPS_PATH.'/'.$class_strut[0].'/'.LIB_DIR.'/';
  347. }
  348. }
  349. if(substr($baseUrl, -1) != "/") $baseUrl .= "/";
  350. $classfile = $baseUrl . $class . $ext;
  351. if($ext == '.class.php' && is_file($classfile)) {
  352. // ????
  353. $class = basename($classfile,$ext);
  354. if(isset($_class[$class]))
  355. throw_exception(L('_CLASS_CONFLICT_').':'.$_class[$class].' '.$classfile);
  356. $_class[$class] = $classfile;
  357. }
  358. //????????????
  359. return require_cache($classfile);
  360. }
  361. /**
  362. +----------------------------------------------------------
  363. * ?????????????
  364. * load('@.Util.Array')
  365. +----------------------------------------------------------
  366. * @param string $name ??????????
  367. * @param string $baseUrl ????
  368. * @param string $ext ????????
  369. +----------------------------------------------------------
  370. * @return void
  371. +----------------------------------------------------------
  372. */
  373. function load($name,$baseUrl='',$ext='.php') {
  374. $name = str_replace(array('.','#'), array('/','.'), $name);
  375. if(empty($baseUrl)) {
  376. if(0 === strpos($name,'@/')) {
  377. //?????????
  378. $baseUrl = APP_PATH.'/Common/';
  379. $name = substr($name,2);
  380. }else{
  381. //??ThinkPHP ?????
  382. $baseUrl = THINK_PATH.'/Common/';
  383. }
  384. }
  385. if(substr($baseUrl, -1) != "/") $baseUrl .= "/";
  386. include $baseUrl . $name . $ext;
  387. }
  388. // ???????????
  389. // ???????????????? ???Vendor????
  390. // ???????.php????
  391. function vendor($class,$baseUrl = '',$ext='.php')
  392. {
  393. if(empty($baseUrl)) $baseUrl = VENDOR_PATH;
  394. return import($class,$baseUrl,$ext);
  395. }
  396. // ?????????
  397. function alias_import($alias,$classfile='') {
  398. static $_alias = array();
  399. if('' !== $classfile) {
  400. // ??????
  401. $_alias[$alias] = $classfile;
  402. return ;
  403. }
  404. if(is_string($alias)) {
  405. if(isset($_alias[$alias]))
  406. return require_cache($_alias[$alias]);
  407. }elseif(is_array($alias)){
  408. foreach ($alias as $key=>$val)
  409. $_alias[$key] = $val;
  410. return ;
  411. }
  412. return false;
  413. }
  414. /**
  415. +----------------------------------------------------------
  416. * D???????Model
  417. +----------------------------------------------------------
  418. * @param string name Model??
  419. * @param string app Model????
  420. +----------------------------------------------------------
  421. * @return Model
  422. +----------------------------------------------------------
  423. */
  424. function D($name='',$app='')
  425. {
  426. static $_model = array();
  427. static $_app = array();
  428. if(empty($name)) return new Model;
  429. if(empty($app)) $app = APP_NAME;
  430. if(isset($_model[$app.$name]))
  431. return $_model[$app.$name];
  432. $OriClassName = $name;
  433. if(strpos($name,C('APP_GROUP_DEPR'))) {
  434. $array = explode(C('APP_GROUP_DEPR'),$name);
  435. $name = array_pop($array);
  436. $className = $name.'Model';
  437. import($app.'.Model.'.implode('.',$array).'.'.$className);
  438. }else{
  439. $className = $name.'Model';
  440. $_ENV['app'] = $app;
  441. import($app.'.Model.'.$className);
  442. }
  443. if(class_exists($className)) {
  444. $model = new $className();
  445. }else{
  446. $model = new Model($name);
  447. }
  448. $_model[$app.$OriClassName] = $model;
  449. return $model;
  450. }
  451. /**
  452. +----------------------------------------------------------
  453. * M????????????????Model
  454. +----------------------------------------------------------
  455. * @param string name Model??
  456. +----------------------------------------------------------
  457. * @return Model
  458. +----------------------------------------------------------
  459. */
  460. function M($name='',$class='Model') {
  461. static $_model = array();
  462. if(!isset($_model[$name.'_'.$class]))
  463. $_model[$name.'_'.$class] = new $class($name);
  464. return $_model[$name.'_'.$class];
  465. }
  466. /**
  467. +----------------------------------------------------------
  468. * A???????Action
  469. +----------------------------------------------------------
  470. * @param string name Action??
  471. * @param string app Model????
  472. +----------------------------------------------------------
  473. * @return Action
  474. +----------------------------------------------------------
  475. */
  476. function A($name,$app='@')
  477. {
  478. static $_action = array();
  479. if(isset($_action[$app.$name]))
  480. return $_action[$app.$name];
  481. $OriClassName = $name;
  482. if(strpos($name,C('APP_GROUP_DEPR'))) {
  483. $array = explode(C('APP_GROUP_DEPR'),$name);
  484. $name = array_pop($array);
  485. $className = $name.'Action';
  486. import($app.'.Action.'.implode('.',$array).'.'.$className);
  487. }else{
  488. $className = $name.'Action';
  489. import($app.'.Action.'.$className);
  490. }
  491. if(class_exists($className)) {
  492. $action = new $className();
  493. $_action[$app.$OriClassName] = $action;
  494. return $action;
  495. }else {
  496. return false;
  497. }
  498. }
  499. function api($name) {
  500. static $_api = array();
  501. // $name = strtolower($name);
  502. if(isset($_api[$name])){
  503. return $_api[$name];
  504. }
  505. $OriClassName = $name;
  506. $className = $name.'Api';
  507. require_once(SITE_PATH.'/api/'.$name.'Api.class.php');
  508. if(class_exists($className)) {
  509. $api = new $className(true);
  510. $_api[$OriClassName] = $api;
  511. return $api;
  512. }else {
  513. return false;
  514. }
  515. }
  516. // ???????????
  517. function R($module,$action,$app='@') {
  518. $class = A($module,$app);
  519. if($class)
  520. return call_user_func(array(&$class,$action));
  521. else
  522. return false;
  523. }
  524. // ?????????(??????)
  525. function L($name=null,$value=null) {
  526. static $_lang = array();
  527. // ?????????
  528. if(empty($name)) return $_lang;
  529. // ??????(???)
  530. // ????,???????$name
  531. if (is_string($name) )
  532. {
  533. $name = strtoupper($name);
  534. if (is_null($value))
  535. return isset($_lang[$name]) ? $_lang[$name] : $name;
  536. $_lang[$name] = $value;// ????
  537. return;
  538. }
  539. // ????
  540. if (is_array($name))
  541. $_lang += array_change_key_case($name,CASE_UPPER);
  542. return;
  543. }
  544. // ?????
  545. function C($name=null,$value=null)
  546. {
  547. static $_config = array();
  548. // ????????
  549. if(empty($name)) return $_config;
  550. // ???????????
  551. if (is_string($name))
  552. {
  553. if (!strpos($name,'.')) {
  554. $name = strtolower($name);
  555. if (is_null($value))
  556. return isset($_config[$name])? $_config[$name] : null;
  557. $_config[$name] = $value;
  558. return;
  559. }
  560. // ???????????
  561. $name = explode('.',$name);
  562. $name[0] = strtolower($name[0]);
  563. if (is_null($value))
  564. return isset($_config[$name[0]][$name[1]]) ? $_config[$name[0]][$name[1]] : null;
  565. $_config[$name[0]][$name[1]] = $value;
  566. return;
  567. }
  568. // ????
  569. if(is_array($name))
  570. return $_config = array_merge($_config,array_change_key_case($name));
  571. return null;// ??????
  572. }
  573. // ????
  574. function tag($name,$params=array()) {
  575. $tags = C('_tags_.'.$name);
  576. if($tags) {
  577. foreach ($tags as $key=>$call){
  578. if(is_callable($call))
  579. $result = call_user_func_array($call,$params);
  580. }
  581. return $result;
  582. }
  583. return false;
  584. }
  585. // ???hook
  586. function hook($name,$params=array()) {
  587. return X($name,$params=array(),'Hook');
  588. }
  589. // ?????
  590. function plugin($name,$params=array()) {
  591. return X($name,$params=array(),'Plugin');
  592. }
  593. // ?????
  594. function service($name,$params=array()) {
  595. return X($name,$params=array(),'Service');
  596. }
  597. // ???widget
  598. function widget($name,$params=array(),$return=false) {
  599. return W($name,$params,$return);
  600. }
  601. // ???model
  602. function model($name,$params=array()) {
  603. return X($name,$params=array(),'Model');
  604. }
  605. // ??????
  606. function X($name,$params=array(),$domain='Service') {
  607. static $_service = array();
  608. //if(empty($app))
  609. $app = C('DEFAULT_APP');
  610. if(isset($_service[$domain.'_'.$app.'_'.$name]))
  611. return $_service[$domain.'_'.$app.'_'.$name];
  612. $class = $name.$domain;
  613. if(file_exists(LIB_PATH.$domain.'/'.$class.'.class.php')){
  614. require_cache(LIB_PATH.$domain.'/'.$class.'.class.php');
  615. }else{
  616. require_cache(SITE_PATH.'/addons/'.strtolower($domain).'s/'.$class.'.class.php');
  617. }
  618. //?????? ???? ? ????
  619. if(class_exists($class)){
  620. $obj = new $class($params);
  621. $_service[$domain.'_'.$app.'_'.$name] = $obj;
  622. return $obj;
  623. }else{
  624. throw_exception(L('_CLASS_NOT_EXIST_').':'.$class);
  625. }
  626. }
  627. // ??????????
  628. function medal($name) {
  629. if ( empty($name) )
  630. return ;
  631. static $_medal = array();
  632. if ( isset($_medal[$name]) )
  633. return $_medal[$name];
  634. $classname = ucfirst($name) . 'Medal';
  635. $filename = $classname . '.class.php';
  636. $basepath = SITE_PATH . '/addons/plugins/Medal';
  637. $filepath = $basepath . '/' . $name . '/' . $filename;
  638. // ????
  639. if ( ! class_exists('BaseMedal') )
  640. require_cache($basepath . '/BaseMedal.class.php');
  641. if ( file_exists($filepath) )
  642. require_cache($filepath);
  643. if ( class_exists($classname) ) {
  644. $_medal[$name] = new $classname();
  645. return $_medal[$name];
  646. }else {
  647. throw_exception(L('_CLASS_NOT_EXIST_').':'.$classname);
  648. }
  649. }
  650. // ?? ??
  651. //function B($name,$options=null) {
  652. // $class = 'BrowseBehavior';
  653. // if(file_exists(SITE_PATH.'/services/BrowseBehavior'.$class.'.class.php')){
  654. // require_cache(SITE_PATH.'/services/BrowseBehavior'.$class.'.class.php');
  655. // }else{
  656. // require_cache(SITE_PATH.'/addons/behaviors/'.$class.'.class.php');
  657. // }
  658. // $behavior = new $class($options);
  659. // return $behavior->run();
  660. //}
  661. // ????Widget
  662. function W($name,$data=array(),$return=false) {
  663. $class = $name.'Widget';
  664. if(file_exists(LIB_PATH.'Widget/'.$class.'.class.php')){
  665. require_cache(LIB_PATH.'Widget/'.$class.'.class.php');
  666. }else{
  667. require_cache(SITE_PATH.'/addons/widgets/'.$class.'.class.php');
  668. }
  669. if(!class_exists($class))
  670. throw_exception(L('_CLASS_NOT_EXIST_').':'.$class);
  671. $widget = new $class();
  672. $content = $widget->render($data);
  673. if($return)
  674. return $content;
  675. else
  676. echo $content;
  677. }
  678. // ?????????
  679. function S($name,$value='',$expire='',$type='') {
  680. static $_cache = array();
  681. alias_import('Cache');
  682. //????????
  683. $cache = Cache::getInstance($type);
  684. if('' !== $value) {
  685. if(is_null($value)) {
  686. // ????
  687. $result = $cache->rm($name);
  688. if($result) unset($_cache[$type.'_'.$name]);
  689. return $result;
  690. }else{
  691. // ????
  692. $cache->set($name,$value,$expire);
  693. $_cache[$type.'_'.$name] = $value;
  694. }
  695. return ;
  696. }
  697. if(isset($_cache[$type.'_'.$name]))
  698. return $_cache[$type.'_'.$name];
  699. // ??????
  700. $value = $cache->get($name);
  701. $_cache[$type.'_'.$name] = $value;
  702. return $value;
  703. }
  704. // ??????????? ???????? ??????
  705. function F($name,$value='',$path=false) {
  706. static $_cache = array();
  707. if(!$path) {
  708. $path = SITE_PATH.'/_runtime/_cache/';
  709. }
  710. if(!is_dir($path)) {
  711. mkdir($path,0777,true);
  712. }
  713. $filename = $path.$name.'.php';
  714. if('' !== $value) {
  715. if(is_null($value)) {
  716. // ????
  717. return unlink($filename);
  718. }else{
  719. // ????
  720. $dir = dirname($filename);
  721. // ????????
  722. if(!is_dir($dir)) mkdir($dir);
  723. return file_put_contents($filename,"<?php\nreturn ".var_export($value,true).";\n?>");
  724. }
  725. }
  726. if(isset($_cache[$name])) return $_cache[$name];
  727. // ??????
  728. if(is_file($filename)) {
  729. $value = include $filename;
  730. $_cache[$name] = $value;
  731. }else{
  732. $value = false;
  733. }
  734. return $value;
  735. }
  736. // ??PHP?????????????
  737. function to_guid_string($mix)
  738. {
  739. if(is_object($mix) && function_exists('spl_object_hash')) {
  740. return spl_object_hash($mix);
  741. }elseif(is_resource($mix)){
  742. $mix = get_resource_type($mix).strval($mix);
  743. }else{
  744. $mix = serialize($mix);
  745. }
  746. return md5($mix);
  747. }
  748. //[RUNTIME]
  749. // ????
  750. function compile($filename,$runtime=false) {
  751. $content = file_get_contents($filename);
  752. if(true === $runtime)
  753. // ???????
  754. $content = preg_replace('/\/\/\[RUNTIME\](.*?)\/\/\[\/RUNTIME\]/s','',$content);
  755. $content = substr(trim($content),5);
  756. if('?>' == substr($content,-2))
  757. $content = substr($content,0,-2);
  758. return $content;
  759. }
  760. // ???????????
  761. function strip_whitespace($content) {
  762. $stripStr = '';
  763. //??php??
  764. $tokens = token_get_all ($content);
  765. $last_space = false;
  766. for ($i = 0, $j = count ($tokens); $i < $j; $i++)
  767. {
  768. if (is_string ($tokens[$i]))
  769. {
  770. $last_space = false;
  771. $stripStr .= $tokens[$i];
  772. }
  773. else
  774. {
  775. switch ($tokens[$i][0])
  776. {
  777. //????PHP??
  778. case T_COMMENT:
  779. case T_DOC_COMMENT:
  780. break;
  781. //????
  782. case T_WHITESPACE:
  783. if (!$last_space)
  784. {
  785. $stripStr .= ' ';
  786. $last_space = true;
  787. }
  788. break;
  789. default:
  790. $last_space = false;
  791. $stripStr .= $tokens[$i][1];
  792. }
  793. }
  794. }
  795. return $stripStr;
  796. }
  797. // ??????????
  798. function array_define($array) {
  799. $content = '';
  800. foreach($array as $key=>$val) {
  801. $key = strtoupper($key);
  802. if(in_array($key,array('THINK_PATH','APP_NAME','APP_PATH','RUNTIME_PATH','RUNTIME_ALLINONE','THINK_MODE')))
  803. $content .= 'if(!defined(\''.$key.'\')) ';
  804. if(is_int($val) || is_float($val)) {
  805. $content .= "define('".$key."',".$val.");";
  806. }elseif(is_bool($val)) {
  807. $val = ($val)?'true':'false';
  808. $content .= "define('".$key."',".$val.");";
  809. }elseif(is_string($val)) {
  810. $content .= "define('".$key."','".addslashes($val)."');";
  811. }
  812. }
  813. return $content;
  814. }
  815. //[/RUNTIME]
  816. // ??????
  817. function mk_dir($dir, $mode = 0755)
  818. {
  819. if (is_dir($dir) || @mkdir($dir,$mode)) return true;
  820. if (!mk_dir(dirname($dir),$mode)) return false;
  821. return @mkdir($dir,$mode);
  822. }
  823. // ??????? ??????
  824. function auto_charset($fContents,$from,$to){
  825. $from = strtoupper($from)=='UTF8'? 'utf-8':$from;
  826. $to = strtoupper($to)=='UTF8'? 'utf-8':$to;
  827. if( strtoupper($from) === strtoupper($to) || empty($fContents) || (is_scalar($fContents) && !is_string($fContents)) ){
  828. //??????????????????
  829. return $fContents;
  830. }
  831. if(is_string($fContents) ) {
  832. if(function_exists('mb_convert_encoding')){
  833. return mb_convert_encoding ($fContents, $to, $from);
  834. }elseif(function_exists('iconv')){
  835. return iconv($from,$to,$fContents);
  836. }else{
  837. return $fContents;
  838. }
  839. }
  840. elseif(is_array($fContents)){
  841. foreach ( $fContents as $key => $val ) {
  842. $_key = auto_charset($key,$from,$to);
  843. $fContents[$_key] = auto_charset($val,$from,$to);
  844. if($key != $_key )
  845. unset($fContents[$key]);
  846. }
  847. return $fContents;
  848. }
  849. else{
  850. return $fContents;
  851. }
  852. }
  853. // xml??
  854. function xml_encode($data,$encoding='utf-8',$root="think") {
  855. $xml = '<?xml version="1.0" encoding="'.$encoding.'"?>';
  856. $xml.= '<'.$root.'>';
  857. $xml.= data_to_xml($data);
  858. $xml.= '</'.$root.'>';
  859. return $xml;
  860. }
  861. function data_to_xml($data) {
  862. if(is_object($data)) {
  863. $data = get_object_vars($data);
  864. }
  865. $xml = '';
  866. foreach($data as $key=>$val) {
  867. is_numeric($key) && $key="item id=\"$key\"";
  868. $xml.="<$key>";
  869. $xml.=(is_array($val)||is_object($val))?data_to_xml($val):$val;
  870. list($key,)=explode(' ',$key);
  871. $xml.="</$key>";
  872. }
  873. return $xml;
  874. }
  875. /**
  876. +----------------------------------------------------------
  877. * Cookie ???????? (???????????) 2009-07-9
  878. +----------------------------------------------------------
  879. * 1 ??cookie: cookie('name')
  880. * 2 ???????????cookie: cookie(null)
  881. * 3 ????????cookie: cookie(null,'think_') | ???????????
  882. * 4 ??cookie: cookie('name','value') | ??????: cookie('name','value',3600)
  883. * 5 ??cookie: cookie('name',null)
  884. +----------------------------------------------------------
  885. * $option ????prefix,expire,path,domain
  886. * ??????:cookie('name','value',array('expire'=>1,'prefix'=>'think_'))
  887. * ??query?????:cookie('name','value','prefix=tp_&expire=10000')
  888. * 2010-1-17 ???????????????????
  889. */
  890. function cookie($name,$value='',$option=null)
  891. {
  892. // ????
  893. $config = array(
  894. 'prefix' => C('COOKIE_PREFIX'), // cookie ????
  895. 'expire' => C('COOKIE_EXPIRE'), // cookie ????
  896. 'path' => C('COOKIE_PATH'), // cookie ????
  897. 'domain' => C('COOKIE_DOMAIN'), // cookie ????
  898. );
  899. // ????(???????)
  900. if (!empty($option)) {
  901. if (is_numeric($option)) {
  902. $option = array('expire'=>$option);
  903. }else if( is_string($option) ) {
  904. parse_str($option,$option);
  905. }
  906. $config = array_merge($config,array_change_key_case($option));
  907. }
  908. // ?????????cookie
  909. if (is_null($name)) {
  910. if (empty($_COOKIE)) return;
  911. // ????cookie?????????config???????
  912. $prefix = empty($value)? $config['prefix'] : $value;
  913. if (!empty($prefix))// ??????????????????
  914. {
  915. foreach($_COOKIE as $key=>$val) {
  916. if (0 === stripos($key,$prefix)){
  917. setcookie($_COOKIE[$key],'',time()-3600,$config['path'],$config['domain']);
  918. unset($_COOKIE[$key]);
  919. }
  920. }
  921. }
  922. return;
  923. }
  924. $name = $config['prefix'].$name;
  925. if (''===$value){
  926. //return isset($_COOKIE[$name]) ? unserialize($_COOKIE[$name]) : null;// ????Cookie
  927. return isset($_COOKIE[$name]) ? ($_COOKIE[$name]) : null;// ????Cookie
  928. }else {
  929. if (is_null($value)) {
  930. setcookie($name,'',time()-3600,$config['path'],$config['domain']);
  931. unset($_COOKIE[$name]);// ????cookie
  932. }else {
  933. // ??cookie
  934. $expire = !empty($config['expire'])? time()+ intval($config['expire']):0;
  935. //setcookie($name,serialize($value),$expire,$config['path'],$config['domain']);
  936. setcookie($name,($value),$expire,$config['path'],$config['domain']);
  937. //$_COOKIE[$name] = ($value);
  938. }
  939. }
  940. }
  941. function ts_cookie($name,$value='',$option=null)
  942. {
  943. // ????
  944. $config = array(
  945. 'prefix' => C('COOKIE_PREFIX'), // cookie ????
  946. 'expire' => C('COOKIE_EXPIRE'), // cookie ????
  947. 'path' => C('COOKIE_PATH'), // cookie ????
  948. 'domain' => C('COOKIE_DOMAIN'), // cookie ????
  949. );
  950. // ????(???????)
  951. if (!empty($option)) {
  952. if (is_numeric($option)) {
  953. $option = array('expire'=>$option);
  954. }else if( is_string($option) ) {
  955. parse_str($option,$option);
  956. }
  957. $config = array_merge($config,array_change_key_case($option));
  958. }
  959. // ?????????cookie
  960. if (is_null($name)) {
  961. if (empty($_COOKIE)) return;
  962. // ????cookie?????????config???????
  963. $prefix = empty($value)? $config['prefix'] : $value;
  964. if (!empty($prefix))// ??????????????????
  965. {
  966. foreach($_COOKIE as $key=>$val) {
  967. if (0 === stripos($key,$prefix)){
  968. setcookie($_COOKIE[$key],'',time()-3600,$config['path'],$config['domain']);
  969. unset($_COOKIE[$key]);
  970. }
  971. }
  972. }
  973. return;
  974. }
  975. $name = $config['prefix'].$name;
  976. if (''===$value){
  977. //return isset($_COOKIE[$name]) ? unserialize($_COOKIE[$name]) : null;// ????Cookie
  978. return isset($_COOKIE[$name]) ? ($_COOKIE[$name]) : null;// ????Cookie
  979. }else {
  980. if (is_null($value)) {
  981. setcookie($name,'',time()-3600,$config['path'],$config['domain']);
  982. unset($_COOKIE[$name]);// ????cookie
  983. }else {
  984. // ??cookie
  985. $expire = !empty($config['expire'])? time()+ intval($config['expire']):0;
  986. //setcookie($name,serialize($value),$expire,$config['path'],$config['domain']);
  987. setcookie($name,($value),$expire,$config['path'],$config['domain']);
  988. //$_COOKIE[$name] = ($value);
  989. }
  990. }
  991. }
  992. ?>