Просмотр файла base.php

Размер файла: 6.63Kb
  1. <?php
  2. /*
  3. ver 0.3
  4. Скрипт для WapBrouser (http://mag.su/game/java.php)
  5. Blade, blade17@rambler.ru
  6.  
  7. Установка: просто скопируйте этот файл на любой хостинг, поддерживающий PHP, а в мидлете WapBrouser укажите его новый адрес (меню "PHP Gate").
  8.  
  9. 0.3: добавлены POST, SELECT и FORM для HTML, загружает не более 15кб
  10. */
  11.  
  12. $tmp=$QUERY_STRING;if($tmp=='') $tmp=$_SERVER["QUERY_STRING"];
  13. $tmp=urldecode($tmp);
  14. $s="";
  15. ini_set("default_socket_timeout",120);
  16. $fp = @fopen($tmp, "r");
  17. if($fp) {
  18. stream_set_timeout($fp, 6);
  19. $s=fread($fp, 15000); //max 15кб
  20. fclose ($fp);
  21. } else $s="Сервер не найден:<br/>".$tmp;
  22. if(!$s) $s="Сервер не отвечает:<br/>".$tmp;
  23. if(strpos($s,"<card")===false) $s="<card>".$s."</card>";
  24. die(w2w($s));
  25.  
  26. // переводит часть "43d" из "&#x043d;" в windows-1251
  27. function unicode2win($s) {if($s=="401") return "Ё"; else if($s=="451") return "ё"; else return(chr(hexdec($s)-848));}
  28. function w2w($s) {
  29. $vars=array();
  30. $pages=array();
  31. $s = str_replace(":escape)",")",$s);
  32. $s = str_replace(":noesc)",")",$s);
  33. $s = preg_replace("/\n|\r/"," ",$s);
  34. $s = preg_replace("/\s{2,}/"," ",$s);
  35. $s = str_replace("> <","><",$s);
  36. $s = str_replace("&amp;","&",$s);
  37. $s = preg_replace("/&#x(?:0)?(\w\w\w);/e","unicode2win('\\0');",$s);
  38. $s = preg_replace("/&(\w+);/","-",$s);
  39.  
  40. $xF = preg_match_all("/<do([^>]*)>((?:.|\n)*?)<\/do>/",$s,$regF);
  41. $links=array();
  42. $data="- Меню -\n";
  43. for ($i=0;$i<$xF;$i++) { // по
  44. $label="";
  45. $href="";
  46. preg_replace("/label=\"(.*?)\"/e",'$label="\\1"',$regF[1][$i]);
  47. preg_replace("/href=\"(.*?)\"/e",'$href="\\1"',$regF[2][$i]);
  48. if ($label && $href) {
  49. // добавляем у в список ссылок и карту
  50. $links[]=array("title"=>$label,"link"=>$href,"from"=>strlen($data),"len"=>strlen($label));
  51. $data.=$label."\n";
  52. }
  53. }
  54. if ($xF>0) {$pages[]=array("id"=>"m123d","title"=>"Меню","links"=>$links,"data"=>$data);}
  55.  
  56. // все тэги
  57. $xF = preg_match_all("/<(\/?[^>]*)>([^<]*)/",$s,$regF);
  58. $links=array();
  59. $data="";
  60. for ($i=0;$i<$xF;$i++) {
  61. if(strtolower(substr($regF[1][$i],0,2))=="br" || substr($regF[1][$i],0,1)=="p") $data.="\n";
  62. if(substr($regF[1][$i],0,5)=="/card") { // карта кончилась, добавим в список карт
  63. $pages[]=array("id"=>$id,"title"=>$title,"links"=>$links,"data"=>$data);
  64. $links=array();
  65. $data="";
  66. } else
  67. if(substr($regF[1][$i],0,4)=="card") {
  68. // найдем title и id
  69. $title="";
  70. $id="";
  71. preg_replace("/title=\"(.*?)\"/e",'$title="- \\1 -"',$regF[1][$i]);
  72. preg_replace("/id=\"(.*?)\"/e",'$id="\\1"',$regF[1][$i]);
  73. $data.=$title.$regF[2][$i];
  74. } else
  75. if (substr($regF[1][$i],0,6)=="anchor") { // обязат. раньше <a (!)
  76. $set="";
  77. $st="";
  78. while($i<$xF && substr($regF[1][$i],0,7)!="/anchor") {$st.="<".$regF[1][$i].">".$regF[2][$i]; $i++;}
  79. // все setvar
  80. $xV = preg_match_all("/setvar\s*name=\"(.*?)\"\s*value=\"(.*?)\"/",$st,$regV);
  81. for ($j=0;$j<$xV;$j++) {
  82. if(!isset($vars[$regV[1][$j]])) $vars[$regV[1][$j]]=""; // добавляем в список переменных, если там нет
  83. $set.="&".$regV[1][$j]."=".$regV[2][$j];
  84. }
  85. // go href
  86. $href="";
  87. preg_replace("/href=\"(.*?)\"/e",'$href="\\1"',$st);
  88. // заменяем POST на GET
  89. $xV = preg_match_all("/postfield\s*name=\"(.*?)\"\s*value=\"(.*?)\"/",$st,$regV);
  90. if ($xV>0 && strpos($href,"?")!==false) $href.="?";
  91. for ($j=0;$j<$xV;$j++) {
  92. $href.="&".$regV[1][$j]."=".$regV[2][$j];
  93. }
  94. $href=str_replace("?&","?",$href);
  95. if ($set) $href="set".$set.":set:".$href;
  96. // title без тэгов
  97. $title=preg_replace("'<[\/\!]*?[^<>]*?>'si","",$st);
  98. $links[]=array("title"=>$title,"link"=>$href,"from"=>strlen($data),"len"=>strlen($title));
  99. $data.=$title;
  100. } else
  101. if (strtolower(substr($regF[1][$i],0,6))=="select") { // все option на ссылки на set&name=val:set:# и именем [текст] и добавляем в переменные
  102. $name="";
  103. preg_replace("/name=\"(.*?)\"/e",'$name="\\1"',$regF[1][$i]);
  104. if(!isset($vars[$name])) $vars[$name]=""; // добавляем в список переменных, если там нет
  105. while($i<$xF && substr($regF[1][$i],0,7)!="/select") {
  106. if(strtolower(substr($regF[1][$i],0,6))=="option") {
  107. $value="";
  108. preg_replace("/value=\"(.*?)\"/e",'$value="\\1"',$regF[1][$i]);
  109. $data.="[";
  110. $links[]=array("title"=>$regF[2][$i],"link"=>"set&".$name."=".$value.":set:#","from"=>strlen($data),"len"=>strlen($regF[2][$i]));
  111. $data.=$regF[2][$i]."]\n";
  112. }
  113. $i++;
  114. }
  115. } else
  116. if (strtolower(substr($regF[1][$i],0,1))=="a") { // парные <a
  117. $href="";
  118. preg_replace("/href=\"(.*?)\"/e",'$href="\\1"',$regF[1][$i]);
  119. $title=$regF[2][$i];
  120. $st="";
  121. while($i<$xF && strtolower(substr($regF[1][$i],0,7))!="/a") {$st.=$regF[2][$i]; $i++;}
  122. $links[]=array("title"=>$title,"link"=>$href,"from"=>strlen($data),"len"=>strlen($st));
  123. $data.=$st;
  124. } else
  125.  
  126. if (strtolower(substr($regF[1][$i],0,4))=="form") { // HTML формы
  127. $action="";
  128. preg_replace("/action=\"(.*?)\"/e",'$action="\\1"',$regF[1][$i]);
  129. if (strpos($action,"?")===false) $action.="?";
  130. // найдем все переменные формы
  131. $j=0;
  132. while($j<$xF && strtolower(substr($regF[1][$j],0,5))!="/form") {
  133. $name="";
  134. preg_replace("/name=\"(.*?)\"/e",'$name="\\1"',$regF[1][$j]);
  135. if ($name) {
  136. $value="";
  137. preg_replace("/value=\"(.*?)\"/e",'$value="\\1"',$regF[1][$j]);
  138. $action.="&".$name."=".$value;
  139. }
  140. $j++;
  141. }
  142. $action=str_replace("?&","?",$action);
  143. $title="Отправить";
  144. $data.="[";
  145. $links[]=array("title"=>$title,"link"=>$action,"from"=>strlen($data),"len"=>strlen($title));
  146. $data.=$title."]";
  147. } else
  148.  
  149. if (strtolower(substr($regF[1][$i],0,5))=="input") { // <input
  150. $name="";
  151. $value="";
  152. preg_replace("/name=\"(.*?)\"/e",'$name="\\1"',$regF[1][$i]);
  153. preg_replace("/value=\"(.*?)\"/e",'$value="\\1"',$regF[1][$i]);
  154. $title="изменить";
  155. $vars[$name]=$value;
  156. $data.="[";
  157. $links[]=array("title"=>$title,"link"=>"%".$name,"from"=>strlen($data),"len"=>strlen($title));
  158. $data.=$title;
  159. $data.=$regF[2][$i]."]";
  160. } else $data.=$regF[2][$i];
  161. }
  162.  
  163. // подготавливаем файл
  164. $wml=pack("C",17); // байт, обозначающий формат WapBrouser'а
  165. $wml.=pack("C",count($vars));
  166. foreach($vars as $name=>$val) $wml.=pack("C",strlen($name)).$name.pack("C",strlen($val)).$val;
  167. $wml.=pack("C",count($pages));
  168. foreach($pages as $page) {
  169. $wml.=pack("C",count($page["links"]));
  170. foreach($page["links"] as $link) $wml.=pack("n",$link["from"]).pack("C",$link["len"]).pack("C",strlen($link["link"])).$link["link"];
  171. $wml.=pack("C",strlen($page["id"])).$page["id"];//.pack("C",strlen($page["title"])).$page["title"];
  172. $wml.=pack("n",strlen($page["data"])).$page["data"];
  173. }
  174. return $wml;
  175. }
  176.