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

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

开发平台:

PHP

  1. <?PHP
  2. /*
  3.     [BBWPS!] (C)2006-2010 小蜜蜂版权所有.
  4. This is NOT a freeware, use is subject to license terms
  5.     时间:2007年12月
  6.     描述:解析Out文件
  7. */
  8. //调用方式
  9. //$x=new OutParse("http://192.168.1.99/bcms/flashtest/out.php");
  10. //$a=$x->GetItems();
  11. //print_r($a);
  12. //-----------------------------------------------
  13. class PermitParse{
  14. var $url;        //Out文件的地址
  15. var $data;       //Out文件的内容
  16. var $version;    //Out文件的版本号
  17. var $items;      //Out文件中的元素信息
  18. //与Out解析有关的属性
  19. var $xml_parser; //xml解析器句柄
  20. var $depth="2";  //XML当前解析深度
  21. var $tag="permit";  //当前正在解析的XML元素
  22. var $prev_tag;   //当前正在解析的上一个元素
  23. var $marker="2"; //用来标记制定的深度
  24. var $event;      //实践名称:CHANNEL and ITEM
  25. var $item_index; //item元素索引
  26. //--------------------------------------------
  27. //功能:PHP5的构造函数
  28. //参数:$Out_url Out文件地址可以是网络地址
  29. //返回:NULL
  30. //--------------------------------------------
  31. function __construct($Out_url=""){
  32. $this->PermitParse($Out_url);
  33. }
  34. //--------------------------------------------
  35. //功能:PHP4的构造函数
  36. //参数:$Out_url Out文件地址可以是网络地址
  37. //返回:NULL
  38. //--------------------------------------------
  39. function PermitParse($Out_url=NULL){
  40. if(get_cfg_var("allow_url_fopen")){//系统开启FOPEN远程调用
  41. $fp=fopen($Out_url,"r");
  42. while(!feof($fp)){$this->data.=fgets($fp,4096);}
  43. fclose($fp);
  44. }
  45. else{$this->data=openFileRemote($Out_url);}
  46. if($this->data){
  47. $this->ParseReg();
  48. }
  49. else{
  50. return null;
  51. }
  52. }
  53. //--------------------------------------------
  54. //功能:获得ITEM的信息
  55. //参数:NULL
  56. //返回:ARRAY
  57. //--------------------------------------------
  58. function GetItems(){
  59. return $this->items;
  60. }
  61. //--------------------------------------------
  62. //功能:获得Out的版本信息
  63. //参数:NULL
  64. //返回:ARRAY
  65. //--------------------------------------------
  66. function GetVersion(){
  67. return $this->version;
  68. }
  69. //--------------------------------------------
  70. //功能:开始解析XML元素
  71. //参数:$parser 解析器句柄
  72. //参数:$name 标签名称
  73. //参数:$attribs 标签的属性
  74. //返回:NULL
  75. //--------------------------------------------
  76. function startElement($parser, $name, $attribs){
  77. $this->depth++;
  78. $this->tag=$name;
  79. switch($name){
  80. case "permit":
  81. $this->event=$name;
  82. $this->version=$attribs["version"];
  83. break;
  84. case "item":
  85. $this->item_index++;
  86. $this->event=$name;
  87. $this->marker=$this->depth+1;
  88. break;
  89. default:
  90. return NULL;
  91. }
  92. }
  93. //--------------------------------------------
  94. //功能:结束某个元素解析时
  95. //参数:$parser 解析器句柄
  96. //参数:$name 标签名称
  97. //返回:NULL
  98. //--------------------------------------------
  99. function endElement($parser, $name){
  100. $this->depth--;
  101. return null;
  102. }
  103. //--------------------------------------------
  104. //功能:处理标签之间的数据
  105. //参数:$parser 解析器句柄
  106. //参数:$data 数据
  107. //返回:NULL
  108. //--------------------------------------------
  109. function characterData($parser, $data){
  110. //当数据为item下的数据时执行
  111. if( $this->event=="item" && $this->marker==$this->depth ){
  112. if($this->prev_tag==$this->tag){
  113. $this->items[$this->item_index][$this->tag].=$data;
  114. }
  115. else{
  116. $this->items[$this->item_index][$this->tag]=$data;
  117. }
  118. }
  119. $this->prev_tag=$this->tag;
  120. }
  121. //--------------------------------------------
  122. //功能:利用PHPXML解析器进行解析
  123. //参数:NULL
  124. //参数:$data 数据
  125. //返回:NULL
  126. //--------------------------------------------
  127. function ParseXML(){
  128. $this->xml_parser = xml_parser_create();//创建xml解析器
  129. xml_set_object($this->xml_parser, &$this);//设置处理的对象
  130. xml_parser_set_option($this->xml_parser, XML_OPTION_CASE_FOLDING, 0);//设置解析的参数,让所有的标签都大写,为了方便以后的处理和统一
  131. xml_set_element_handler($this->xml_parser, "startElement", "endElement");//设置解析标签时候的回调函数
  132. xml_set_character_data_handler($this->xml_parser, "characterData");//设置解析标签内容时候的回调函数
  133. if (!xml_parse($this->xml_parser, $this->data)){//开始解析数据
  134. return false;
  135. }
  136. return true;
  137. }
  138. //--------------------------------------------
  139. //功能:利用PHP正则解析器进行解析
  140. //参数:NULL
  141. //参数:$data 数据
  142. //返回:NULL
  143. //--------------------------------------------
  144. function ParseReg(){
  145. preg_match_all("/<item>(.*?)</item>/is",$this->data,$itemArray);
  146. foreach ($itemArray[1] as $item){
  147. $this->item_index++;
  148. preg_match_all("/<([a-zA-Z]+)>(.*?)</\1>/is",$item,$tagArray);
  149. foreach ($tagArray[2] as $key=>$data){
  150. $this->items[$this->item_index][strtolower(trim($tagArray[1][$key]))]=$data;
  151. }
  152. }
  153. }
  154. }
  155. ?>