tagParse_class.php
上传用户:yttaitong
上传日期:2009-05-10
资源大小:128k
文件大小:8k
源码类别:

WEB源码(ASP,PHP,...)

开发平台:

PHP

  1. <?
  2. /*
  3.     [BBWPS!] (C)2006-2010 小蜜蜂版权所有.
  4. This is NOT a freeware, use is subject to license terms
  5.     时间:2007年12月
  6.     描述:解析模板上的参数、并把各模块返回的XML解析成数组、根据模板上的参数要求显示到要求的模板上去
  7. */
  8. /*调用方法
  9. $t = new tagParse($p,"./template/default/default.html");
  10. $t->setInstallPath($installPath);
  11. $t->setModuleArray($moduleArray);
  12. $p = $t->parse();
  13. $t->__tagdParse();*/
  14. class tagParse{
  15. var $p = "";                //模板对像
  16. var $parsePath = "";        //解析模板路径
  17. var $fileString = "";       //获得模板内容
  18. var $moduleArray;           //安装模块的配置文件
  19. var $installPath = "";      //平台的安装路径
  20. var $isopen = FALSE;        //是否打开缓存
  21. var $limit_time_day = "";   //限制白天最大刷新时间(秒)
  22. var $limit_time_night = ""; //限制夜间最大刷新时间(秒)
  23. var $isCreateCash = FALSE;  //CASH是否到了生存期
  24. var $cashDir ="";           //设置CASH的目录
  25. var $cashPath = "";         //设置CASH的路径
  26. var $baseCheckCode = "";    //设置平台和模块间的通讯口令
  27. //----------------------------------------------------
  28. //构造函数
  29. //----------------------------------------------------
  30. function tagParse($p,$parsePath,$baseCheckCode){
  31. $this->p = $p;
  32. $this->parsePath =$parsePath;
  33. $this->baseCheckCode = $baseCheckCode;
  34. }
  35. //----------------------------------------------------
  36. //析构函数
  37. //----------------------------------------------------
  38. function __tagdParse(){
  39. unset($this->p,$this->parsePath,$this->fileString,$this->moduleArray,$this->installPath,$this->isopen,$this->limit_time_day,$this->limit_time_night,$this->isCreateCash,$this->cashDir,$this->cashPath);
  40. }
  41. //----------------------------------------------------
  42. //获得模板内容
  43. //----------------------------------------------------
  44. function getContent(){
  45. $this->fileString=file_get_contents($this->parsePath);
  46. }
  47. //----------------------------------------------------
  48. //获得安装模块的配置文件
  49. //----------------------------------------------------
  50. function setModuleArray($moduleArray){
  51. $this->moduleArray = $moduleArray;
  52. }
  53. //----------------------------------------------------
  54. //获得平台的安装路径
  55. //----------------------------------------------------
  56. function setInstallPath($installPath){
  57. $this->installPath = $installPath;
  58. }
  59. //----------------------------------------------------
  60. //获得是否开启CASH
  61. //----------------------------------------------------
  62. function setOpenCash($isopen=FALSE){
  63. $this->isopen = $isopen;
  64. }
  65. //----------------------------------------------------
  66. //设置CASH目录
  67. //----------------------------------------------------
  68. function setCashDir($dir){
  69. $this->cashDir = $dir;
  70. }
  71. //----------------------------------------------------
  72. //获得CASH的生存时间
  73. //----------------------------------------------------
  74. function setCashTime($limit_time_day,$limit_time_night){
  75. $this->limit_time_day = $limit_time_day;
  76. $this->limit_time_night = $limit_time_night;
  77. }
  78. //----------------------------------------------------
  79. //设置CASH的路径
  80. //----------------------------------------------------
  81. function setCashPath($cashName){
  82. $this->cashPath = $this->cashDir."/".md5($cashName).".php";
  83. }
  84. //----------------------------------------------------
  85. //判断CASH是否到了生存期
  86. //----------------------------------------------------
  87. function isCreateCash(){
  88. $dispersion    = time() - @filemtime($this->cashPath);              //当前时间同文件修改时间之差
  89. $current_time_hour = (int)date("G",time());                  //当前的小时
  90. //----------------------------------------------------
  91. //判断白天CASH的生存时间
  92. //----------------------------------------------------
  93. if ($current_time_hour > 7 && $current_time_hour < 23) {
  94. if ($dispersion > $this->limit_time_day)
  95. $this->isCreateCash = true;
  96. //----------------------------------------------------
  97. //判断夜晚CASH的生存时间
  98. //----------------------------------------------------
  99. } else {
  100. if ($dispersion > $this->limit_time_night)
  101. $this->isCreateCash = true;
  102. }
  103. }
  104. //----------------------------------------------------
  105. //生成CASH
  106. //----------------------------------------------------
  107. function createCash($url){
  108. if($this->isCreateCash){
  109. //-----------------------------------------
  110. //解析XML成数组
  111. //-----------------------------------------
  112. $x=new OutParse($url);
  113. $a=$x->GetItems();
  114. $stringOfCacheContent='<?PHP'."n";
  115. foreach ($a as $k=>$v){
  116. foreach ($v as $key=>$value){
  117. $value=str_replace('"','"',$value);
  118. $value=nl2br($value);
  119. $stringOfCacheContent.='$a["'.$k.'"]["'.$key.'"]="'.trim($value).'";'."n";
  120. }
  121. }
  122. foreach ($f as $k=>$v){
  123. foreach ($v as $key=>$value){
  124. $value=str_replace('"','"',$value);
  125. $value=nl2br($value);
  126. $stringOfCacheContent.='$f["'.$k.'"]["'.$key.'"]="'.trim($value).'";'."n";
  127. }
  128. }
  129. $stringOfCacheContent.="?>";
  130. $stringOfCacheContent=preg_replace("/s[ ]+/is","",$stringOfCacheContent);
  131. $fp = @fopen ($this->cashPath,"w");
  132. @fputs($fp,$stringOfCacheContent);
  133. @fclose($fp);
  134. }
  135. }
  136. //----------------------------------------------------
  137. //解析模板并在模板上显示
  138. //----------------------------------------------------
  139. function parse(){
  140. $this->getContent();
  141. preg_match_all("/{module_(.+?)_category_([0-9s]+)_type_(.+?)_number_([0-9s]+)_template_(.+?)}/is",$this->fileString,$match);
  142. //-----------------------------------------
  143. //解析平台各个子模块的内容
  144. //-----------------------------------------
  145. foreach ($match[1] as $key=>$value){
  146. //----------------------------------------------------------
  147. //校验码 随机产生MD5加密次数 把加把加密次数附加在密文最后一位
  148. //----------------------------------------------------------
  149. $checkNum = rand(2,9);
  150. $check = MakeMd5($this->baseCheckCode,$checkNum).$checkNum;
  151. //-----------------------------------------
  152. //获得URL
  153. //-----------------------------------------
  154. $moduleArrayFlag = "bbwps_module_".$match[1][$key]; //下标
  155. //------------------------------------------------------------------
  156. //判断$this->moduleArray[$moduleArrayFlag]['dns']是否为空
  157. //如果为空则不进行此次请求
  158. //------------------------------------------------------------------
  159. if($this->moduleArray[$moduleArrayFlag]['idns']){
  160. $url = strtolower($this->moduleArray[$moduleArrayFlag]['idns']."/api/out.php?type=".$match[3][$key]."&catid=".$match[2][$key]."&number=".$match[4][$key]."&check=".$check);
  161. $url = str_replace("//api","/api",$url);
  162. }
  163. else{
  164. if($this->moduleArray[$moduleArrayFlag]['dns']){
  165. $url = strtolower($this->moduleArray[$moduleArrayFlag]['dns']."/api/out.php?type=".$match[3][$key]."&catid=".$match[2][$key]."&number=".$match[4][$key]."&check=".$check);
  166. $url = str_replace("//api","/api",$url);
  167. }
  168. else{
  169. continue;
  170. }
  171. }
  172. //-----------------------------------------
  173. //打开缓存
  174. //-----------------------------------------
  175. if($this->isopen){
  176. //-----------------------------------------
  177. //CASH的路径由模板变量MD5加密获得
  178. //-----------------------------------------
  179. $this->setCashPath($match[0][$key]);
  180. $this->isCreateCash();
  181. $this->createCash($url);
  182. include_once($this->cashPath);
  183. }
  184. //-----------------------------------------
  185. //关闭缓存
  186. //-----------------------------------------
  187. else {
  188. //-----------------------------------------
  189. //解析XML成数组
  190. //-----------------------------------------
  191. $x=new OutParse($url);
  192. $a=$x->GetItems();
  193. }
  194. //-----------------------------------------
  195. //把获得的数据显示在模板上
  196. //-----------------------------------------
  197. $this->p->set_var("module_category",null);
  198. $this->p->set_file("module_category",$match[5][$key].".html");
  199. $outString = substr($match[0][$key],1,-1);
  200. //-----------------------------------------
  201. //把解析出来的数组下标转换为小写
  202. //-----------------------------------------
  203. foreach ($a as $key=>$value){
  204. $a[$key] = array_change_key_case($value);
  205. }
  206. $this->p->set_var($outString,null);
  207. foreach ($a as $v){
  208. //-----------------------------------------
  209. //以后$match[5][$key]显示长度在这里实现
  210. //-----------------------------------------
  211. $this->p->set_var($v);
  212. $this->p->parse($outString,"module_category",true);
  213. }
  214. unset($a);
  215. }
  216. return $this->p;
  217. unset($x,$a,$match,$absultePath,$outString);
  218. }
  219. }
  220. ?>