人一生这一辈子,能记住多少事?还是写下来的好。 注册 | 登陆
浏览模式: 标准 | 列表分类:WEB技术

用PHP实现的反向代理程序。

今天闲着无聊,写了这么一个小程序。不过本人没条件测试,所以最终效果还不知道。哈哈。

具体的设置是需要设置rewrite所有链接到代理程序的文件上,然后就可以通过此程序访问其它站点了。不过估计性能不会太高吧。反向代理还是用NGINX来做好些吧。不过对于虚拟主机倒是有用武之地了。

代码如下:

» 阅读全文

【转】隆重献礼:http协议调试神器 – Fiddler

Fiddler真乃神器!它和市面上常见的很多web调试器、http调试器、sniffer都不同!它的原理是在浏览器(或者其他使用http协议的进程)和服务器之间做代理角色,这样所有的通信都要经过它!尽管sniffer和这个原理是一样的,但他们工作的网络层不同。

 

看上图,你就明白原理了咯,它以8888端口(多么吉利的数字呀!)开本地代理服务器,并且支持https!所以,只要你的http通讯将代理设置为本地8888,fiddler都能帮助你截获数据;另外,说他是神器,除了他具有一般web调试器的所有功能之外,其最最大的一个特点是可以中途修改http通信内容!!!看下图:

嗯,就是这样,提交内容和服务端响应内容都可以被fiddler中断,修改内容后再次继续,在ajax通信的时候,我们可以利用这个功能来调试数据,测试bug!方便至极。

还有一个我不得不说的功能就是Fiddler内置的request Builder能让你轻松的构造http请求,之前我一直用的是火车采集器里面的那个简易的POST/GET Builder,个人感觉Fiddler的这个更好用一些。另外的一个附件就是encoder,方便的解码base64、urlencode、hex等进行的相互转换,之前我是用JS写了一个工具实现这个功能,吼吼!~我发现Fiddler的时候不知道有多兴奋,以前用wireshark+火车采集器+JS encoder,现在只需要开一个Fiddler就可以啦!

今天,我就隆重的把它介绍给大家,也许大家早已在使用了,因为这个工具已经存在很久了,微软的东西,需要.net freamework 支持,这是唯一不爽的地方!但我承认,微软的.net类库真的太丰富了!快来使用哈!更多功能期待您的发掘。

Tags: http协议, 调试

【转】php的多进程并发任务简单实现[linux下]

看代码:

 

PHP代码
  1. <?php   
  2. if(isset($argv[1]))   
  3. {   
  4.     sleep(100);//这里是为了让程序活得长一些。以便观察,实际应用中不必sleep   
  5. }   
  6. else  
  7. {   
  8.     //本来应该再配合一个任务池。现在还没想好任务池如何控制   
  9.     //数量不可控的任务是危险的,等想好了解决办法再补充。   
  10.     for($i=0;$i<100;$i++)   
  11.     {   
  12.         //为了方便,我调用了自身。实际中可以去调用一个或多个其他程序。   
  13.         pclose(popen("nohup php -q test.php $i >>/tmp/test.$i.log &",'r'));   
  14.     }   
  15. }   
  16. ?>  

popen和pclose可能对一些人来说比较陌生。

不过你应该听说过system() exec() passthru() ``

popen也是用来执行系统命令的,它与其他执行方式有一点不同,它执行后返回命令指针,就像fopen那样。而不是等待程序的完成返回最终结果。

配合nohup可以让程序在关闭指针后,子任务仍然能继续执行。

注意:">>/tmp/test.$i.log"的作用是重定向nohup的输出。缺少的话,程序将不能在后台执行。

例子有点简陋。不过,应该能把事情说清楚了吧。

Tags: php, 多线程, 多进程

【转】尝试php命令行脚本多进程并发执行

除了fork, cli下的并发方式还有一种,看我的例子:


php不支持多线程,但是我们可以把问题转换成“多进程”来解决。由于php中的pcntl_fork只有unix平台才可以使用,所以本文尝试使用popen来替代。


下面是一个例子:

被并行调用的子程序代码:

» 阅读全文

Tags: php, 多线程, 多进程

【转】PHP中的(伪)多线程与多进程

我们知道PHP本身是不支持多线程的, 但是我们的WEB服务器是支持多线程的.也就是说可以同时让多人一起访问. 这也是我在PHP中实现多线程的基础.假设我们现在运行的是a.php这个文件. 但是我在程序中又请求WEB服务器运行另一个b.php那么这两个文件将是同时执行的.

(PS: 一个链接请求发送之后, WEB服务器就会执行它, 而不管客户端是否已经退出)

有些时候, 我们想运行的不是另一个文件, 而是本文件中的一部分代码.该怎么办呢?

其实可是通过参数来控制a.php来运行哪一段程序.

» 阅读全文

Tags: php, 多线程, 多进程

【转】使用proc_open()打开一个指向进程的管道

手机视频广告,用PHP发送视频广告,需要通过PHP执行一个外部发送视频命令。

       可以写PHP扩展来完成,本人没有那个能力及时间,故使用exec()这个函数来完成。

       passthru(),exec(),system() 这三个函数功能相似.passthru无法接受输出值,system只接收最后以行输出,exec可以完全接收输出.
       见如下passthru的一个例子:

» 阅读全文

Tags: php, 多线程, 多进程

【转】Linux命令行用SpiderMonkey执行javascript脚本

现在很多登录密码,提交的javascript加密后的密文,给模拟登录带来一定困难。java6已经支持ScriptEngine,模拟起来比较简单,其它语言可能相对复杂一点。

本文介绍用SpiderMonkey来实现在linux命令行下运行脚本文件。

下面的脚本在ubuntu8.10下测试通过:

» 阅读全文

Tags: linux, js

今天自个儿写了个jsonDecode的函数来替代PHP的json_decode

PHP代码
  1. //将内容进行UNICODE编码   
  2. function unicode_encode($name)   
  3. {   
  4.     $name = iconv('UTF-8''UCS-2'$name);   
  5.     $len = strlen($name);   
  6.     $str = '';   
  7.     for ($i = 0; $i < $len - 1; $i = $i + 2)   
  8.     {   
  9.         $c = $name[$i];   
  10.         $c2 = $name[$i + 1];   
  11.         if (ord($c) > 0)   
  12.         {   //两个字节的文字   
  13.             $str .= '\u'.base_convert(ord($c), 10, 16).base_convert(ord($c2), 10, 16);   
  14.         }   
  15.         else  
  16.         {   
  17.             $str .= $c2;   
  18.         }   
  19.     }   
  20.     return $str;   
  21. }   
  22.   
  23. //将UNICODE编码后的内容进行解码   
  24. function unicode_decode($name)   
  25. {   
  26.     //转换编码,将Unicode编码转换成可以浏览的utf-8编码   
  27.     $pattern = '/(\\\u([\w]{4}))/i';   
  28.     $name = preg_replace_callback( $pattern , '_unicode_decode' , $name );   
  29.     return $name;   
  30. }   
  31.   
  32. function _unicode_decode( $str ) {   
  33.     $str = $str[0];   
  34.     $name = '';   
  35.     $code = base_convert(substr($str, 2, 2), 16, 10);   
  36.     $code2 = base_convert(substr($str, 4), 16, 10);   
  37.     $c = chr($code).chr($code2);   
  38.     $c = iconv('UCS-2''UTF-8'$c);   
  39.     $name .= $c;   
  40.   
  41.     return $name;   
  42. }   
  43.   
  44.   
  45. function jsonDecode( $json , $to_encode = 'gbk' , & $i = 0 ) {   
  46.     if ( null === $i ) {   
  47.         $i = 0;   
  48.     }   
  49.   
  50.     for( ; $i < strlen$json ) ; $i ++ ) {        
  51.         $chr = $json[$i];   
  52.   
  53.         switch$chr ) {   
  54.             case '"' :   
  55.             case "'" :  
  56.                 //字符串         
  57.                 $i ++;  
  58.                 $val = '';  
  59.                 while( $json[$i] != $chr || $lastChr == '\\' ) {  
  60.                     $lastChr = $json[$i];  
  61.                     $val .= $lastChr;  
  62.                     $i ++;  
  63.                       
  64.                 }  
  65.                 ++ $i;  
  66.                   
  67.                 //字符串处理  
  68.                   
  69.                 //unicode 转汉字  
  70.                 $val = unicode_decode( $val );  
  71.                 if ( strtolower( str_ireplace( '-' , '' , $to_encode ) ) !== 'utf8' ) {  
  72.                     $val = mb_convert_encoding( $val , $to_encode , 'utf-8' );  
  73.                 }  
  74.                 $val = stripslashes( $val );                  
  75.                 return $val;  
  76.                 break;  
  77.             case 'a' :  
  78.             case 'b' :  
  79.             case 'c' :  
  80.             case 'd':  
  81.             case 'e':  
  82.             case 'f':  
  83.             case 'g':  
  84.             case 'h':  
  85.             case 'i':  
  86.             case 'j':  
  87.             case 'k':  
  88.             case 'l':  
  89.             case 'm':  
  90.             case 'n':  
  91.             case 'o':  
  92.             case 'p':  
  93.             case 'q':  
  94.             case 'r':  
  95.             case 's':  
  96.             case 't':  
  97.             case 'u':  
  98.             case 'v':  
  99.             case 'w':  
  100.             case 'x':  
  101.             case 'y':  
  102.             case 'z':  
  103.             case 'A' :  
  104.             case 'B' :  
  105.             case 'C' :  
  106.             case 'D':  
  107.             case 'E':  
  108.             case 'F':  
  109.             case 'G':  
  110.             case 'H':  
  111.             case 'I':  
  112.             case 'J':  
  113.             case 'K':  
  114.             case 'L':  
  115.             case 'M':  
  116.             case 'N':  
  117.             case 'O':  
  118.             case 'P':  
  119.             case 'Q':  
  120.             case 'R':  
  121.             case 'S':  
  122.             case 'T':  
  123.             case 'U':  
  124.             case 'V':  
  125.             case 'W':  
  126.             case 'X':  
  127.             case 'Y':  
  128.             case 'Z':     
  129.             case '0':  
  130.             case '1':  
  131.             case '2':  
  132.             case '3':  
  133.             case '4':  
  134.             case '5':  
  135.             case '6':  
  136.             case '7':  
  137.             case '8':  
  138.             case '9':  
  139.               
  140.                 //字符串  
  141.                 if ( trim( $chr ) === '' ) {  
  142.                     continue;  
  143.                 }  
  144.                 $val = $chr;  
  145.                 while( preg_match( '#^[a-zA-Z0-9\.]$#' , $json[++$i] ) ) {  
  146.                     $val .= $json[$i];                                    
  147.                 }  
  148.                 $lVal = strtolower( $val );  
  149.                 if ( $lVal == 'true' ) {  
  150.                     return true;  
  151.                 }  
  152.                 if ( $lVal == 'false' ) {  
  153.                     return false;  
  154.                 }  
  155.                 if ( preg_match( '#^[0-9\.]+$#' , $lVal ) ) {  
  156.                     return $val + 0;  
  157.                 }  
  158.                 return $val;  
  159.             case '{' :  
  160.                 $val = array();  
  161.                 $i ++;  
  162.                 $key = '';  
  163.                 while( $json[$i] != '}' ) {  
  164.                     $key .= $json[$i];  
  165.                     $i ++;  
  166.                     if ( $json[$i] == ':' ) {  
  167.                         $key = ltrim( $key );  
  168.                         $key = ltrim( $key , ',' ); //去除,  
  169.                         $key = trim( $key );//去两边的空白  
  170.                         if ( preg_match( '#^"(.+?)"$#' , $key , $m ) ) {  
  171.                             $key = $m[1];  
  172.                         }  
  173.                         if ( preg_match( '#^\'(.+?)\'$#' , $key , $m ) ) {   
  174.                             $key = $m[1];   
  175.                         }   
  176.                         ++ $i;   
  177.                         $val[$key] = jsonDecode( $json , $to_encode , $i );   
  178.                         $key = '';                         
  179.                     }                      
  180.                 }   
  181.                 ++ $i;   
  182.                 return $val;   
  183.                 break;   
  184.             case '[' :   
  185.                 $val = array();   
  186.                 $i ++;   
  187.                 $t = 0;   
  188.                 while$json[$i] != ']' ) {   
  189.                     if ( $json[$i] == ',' ) {   
  190.                         $i ++;   
  191.                         continue;   
  192.                     }                      
  193.                     $val[] = jsonDecode( $json , $to_encode  , $i );                       
  194.                    
  195.                 }   
  196.                    
  197.                 $i ++;   
  198.                 return $val;   
  199.                 break;   
  200.         }   
  201.     }   
  202.     return NULL ;   
  203. }   

 

用法:

 

PHP代码
  1. $array_gbk = jsonDecode( $jsonString );   
  2.   
  3. $array_utf8 = jsonDecode( $jsonString , 'utf-8' );   
Records:5812345678