基于DS80C400的嵌入式网络传感器的研究与设计

awk命令详解

WEB2.0 jackxiang 2009-7-28 18:10
AWK指令详解:阅读全文
今天想使用这一句php来判断一个文件是否存在:  

echo is_file('/var/downloads/donkey/incoming/[当地球停止转动].The.Day.The.Earth.Stood.Still.DVDRip.XviD-DMT.avi')?"true":"false";  

结果总是报false  
估计原因是php的编码格式和操作系统的文件名编码格式不统一,所以就超市使用如下语句:

echo is_file(iconv('UTF-8','GB2312','/var/downloads/donkey/incoming/[当地球停止转动].The.Day.The.Earth.Stood.Still.DVDRip.XviD-DMT.avi'))?"true":"false";  

结果成功,但是找来找去,找不到php获得操作系统默认编码格式的函数,所以只能写死了。
背景:本来想自己写的,算了,这个哥们写得更好,引用得了,http://www.cnblogs.com/xia520pi/p/3697099.html 。
官方文档说include和require唯一的区别就是出现找不到文件后会不会直接执行区别,条件引用说法不对,include和require两者的不同,不同点2经测试好像不是太明显。
英文:
The include construct will emit a warning if it cannot find a file; this is different behavior from require, which will emit a fatal error.
中文:
include触发警告,require触发错误,也就是说include没有发现文件会继续运行,而require发现没有文件则会停止运行,require ~once 会造成程序终止,如果要回滚事务什么的就完了,或者后面要关闭数据库链接什么的:
深究:include触发警告,require触发错误 为什么?问写php底层的人,为毛这样搞。
示例:在include找不到文件时程序继续运行,而require则不会继续运行。
[root@iZ25dcp92ckZ php]# cat include2.php

[root@iZ25dcp92ckZ php]# php include2.php    
abc
[root@iZ25dcp92ckZ php]# cat include3.php

[root@iZ25dcp92ckZ php]# php include3.php    
[root@iZ25dcp92ckZ php]#

include和require两者的不同点二:
.require 不管require语句有没有执行,程序执行包含文件都被加入进来 include只有执行的时候文件才会被包含
   在 判断 函数里面,用include显然是比较好的




====================================================================

php提供了两种包含外部文件的方法:include()和require()。include()语句是一个常规的php函数;而require()是一种特殊的语言结构,它的使用受到一些限制。对这两者来说,不管使用哪个语句来包含文件,解析程序都将退出php模式并在目标文件的开头进入HTML模式。这意味着目标文件中的所有应该作为php脚本执行的代码都必须被包含在有效的php起始标记和终止标记中。
  在同一脚本中,每次出现include()函数,它都会被执行,它甚至有可能被包含在循环或条件语句中。这意味着通过使用条件判断是否包含一个文件,它还可以使用循环结构包含一组文件。include()语句对文件的处理将终止。
  require()语句与include()语句是不同的,它不能受任何控制结构的控制。这说明使用require()不能有条件的包含文件。如果这个语句出现在循环中,或者位于取值为假的条件语句中,它也都会执行,并且只执行一次。另一个区别是,使用require()语句包含的文件不能有返回值。试图在require()语句中返回值将会产生一个解析错误

0.require加上判断并没有进入程序逻辑也包含进去了:http://www.cnblogs.com/dyllen/archive/2013/03/08/2950826.html

1.性能上,没有差别

2.require 不管require语句有没有执行,程序执行包含文件都被加入进来 include只有执行的时候文件才会被包含
   在 判断 函数里面,用include显然是比较好的

3.循环体:  require()不能在循环体中根据条件的不同而包含不同的文件。require()语句只会在第一次执行时调用它所包含的文件中的内容替换本身这条语句,当再次被执行时只能执行第一次所包含的语句。但是include()语句可以在循环体中来包含不同的文件。
Php代码





    补充 require 文件在程序执行过程中只能被包含一次,而include每次执行,文件都重新被包含,选择include的话,

保证包含文件多次包含不会出错,举例:
Php代码
conn.php:  
    

conn.php:



   在第二次调用的时候会出错,但是把 include 换成 require 就不会出问题。

  因为 require 文件只在读到该页面的时候调用一次,而 include 在每次调用含有   fun 的地方都调用,所以就出现了数据库连接还没关闭就再次连接的错误。

  因此在循环中只要调用一次的用 require ,其他地方这两个都可以用。

    4.报警:如果被包含的文件不存在,require:程序终止  include:报警,继续执行
    
    5.require include 比 file_get_content慢
1 开源的目的是什么,你是否支持开源,如果你加入开源项目组,你是否会开源自己的代码?
2 强命名并不能让人方便地保护程序,除引用WEB服务外,有无其他程序保护方法?目的是保护组件不被他人利用或是被反编译.
3 你认为就中国而言,未来的软件将有什么特点趋势,以及有什么令人惊喜的成果?
4 你是否在开发中把自己比作客户对象,而不是以一个无知的电脑新手为客户目标?
5 你是否考虑过客户可能不喜欢你的布局或是你的配色,你是否会将此作为重点解决目标之一?


1 开源的目的是什么,你是否支持开源,如果你加入开源项目组,你是否会开源自己的代码?
  1开源的目的是为了支持我喜欢的语言,让大家都来学习我喜欢的语言。
  如果网络上有很多VB.NET的开源项目,那么这种语言会有很多人来学习。因为学习资料很多。
  2为了提高知名度,得到社区的支持和赞同
  3为了商业目的,开源的东西,很多大公司愿意使用,安全,廉价,可以修改代码,定制软件。
  如果很多大公司用了我的开源软件,那个时候,就靠服务,技术支持赚钱了。
2 强命名并不能让人方便地保护程序,除引用WEB服务外,有无其他程序保护方法?目的是保护组件不被他人利用或是被反编译.
  这个没有研究过,不过,以后不是卖软件,是卖服务,卖标准
3 你认为就中国而言,未来的软件将有什么特点趋势,以及有什么令人惊喜的成果?
  基本上,中国软件已经死了。外包,看式样书写程序的人太多了。
  没有自己的技术,核心。不需要算法,只要外国人给项目。
  所有人研究DB,但是只限于SQL语法。
  不肯老老实实从头开发,节约成本,拿来主义。
  别人的控件,用得开心,设置控件属性,就是写程序。
  不考虑效率,只要正确,不优化代码,不重构,没有设计模式。
  我发现,很多真正的高手的本职工作,可能和他的上班的工作完全不一样的。兴趣才是好的程序员的土壤
4 你是否在开发中把自己比作客户对象,而不是以一个无知的电脑新手为客户目标?
  我写的东西,最好是我妈妈都容易使用的。这个最重要。
  不要搞得很高深的样子。
5 你是否考虑过客户可能不喜欢你的布局或是你的配色,你是否会将此作为重点解决目标之一?
  用户界面很重要的。第一眼给人的印象非常重要的。我愿意使用漂亮的,但不一定是最完美的软件。
php的mbstring扩展模块提供了多字节字符的处理能力,平常最常用的就是用mbstring来切分多字节的中文字符,这样可以避免出现半个字符的情况,由于是php的扩展,它的性能也要比一些自定义的多字节切分函数要好上一些。

mbstring extension提供了几个功能类似的函数,mb_substr和mb_strcut,看看手册上对它们的解释。

mb_substr
mb_substr() returns the portion of str specified by the start and length parameters.

mb_substr() performs multi-byte safe substr() operation based on number of characters. Position is counted from the beginning of str. First character's position is 0. Second character position is 1, and so on.

mb_strcut
mb_strcut() returns the portion of str specified by the start and length parameters.

mb_strcut() performs equivalent operation as mb_substr() with different method. If start position is multi-byte character's second byte or larger, it starts from first byte of multi-byte character.

It subtracts string from str that is shorter than length AND character that is not part of multi-byte string or not being middle of shift sequence.

举个例子来说,有一段文字, 分别用mb_substr和mb_strcut来做切分:

PLAIN TEXT
CODE:
$str = '我是一串比较长的中文-www.webjx.com';

echo "mb_substr:" . mb_substr($str, 0, 6, 'utf-8');

echo "
";

echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
?>
输出结果如下:

mb_substr:我是一串比较
mb_strcut:我是
2007年12月05日 星期三 下午 04:14
keywords:substr,substr utf-8 gbk gb2312 编码

STEP 1:
utf-8是变长的unicode编码。
以下是unicode和utf8对应关系
U-00000000 - U-0000007F: 0xxxxxxx [1 byte]
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx   [2 byte]
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx   [3 byte]
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx   [4 btye]
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx   [5 byte]
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx [6 byte]
可以看出utf-8编码的数据其byte可以分为3类:0xxxxxxx,10xxxxxx和1110xxxx(再大的也归这类,很少使用);
A类 字节值小于127(--0x80),一个字节即表示一个字,例如:数字以及大小写字母;
B类 字节值在128(0x80)和192(0xC0)之间的。该类字节只有后6位有效,不能单独存在,必须和前面字节连起来才能表示一个完整的字符,处理不当就产生乱码。
C类 字节值大于192(0xC0++)的。该类字节如果小于224(0xE0,也就是11000000-11011111,定小于1110xxxx)那么它应和下一个字节(B类)后6位连起来才能用。若小于240(0xF0,也就是1110xxxx)则需和后两个字节连用。以此类推。

UTF与unicode的关系:
Unicode是一个字符集, 可以看作为内码.而UTF 是一种编码方式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第一个byte都是0x00, 在操作系统(C语言)中有特殊意义, 会引起问题. 采用UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来一些优点.

STEP 2: 汉字编码规范:
BIG5=繁体中文
GB2312=ASCII+常用汉字+符号
GBK=GB2312+不常用字(含BIG5繁体汉字)+图形符号
GB18030=GBK+Ext-A+藏、蒙、维吾尔等文字

向上兼容,中文Windows的缺省内码还是GBK,但是Unicode只与ASCII兼容(ISO-8859-1),与GBK码不兼容,需要根据编码表做转换。

所以,对于汉字的GBK编码是这样表示的:把一个汉字用两个字节来表示,其首字节对应0x81-0xFE(即129-224),尾字节对应除掉 (0x7F)的0x40-oxFE(即64-126和128-224)。汉字的GBK编码首字节的起始编码0x81,其二进制即为0000 1000 0000 0000,可见若一个字符的二进制逻辑与0x81之后为0时,该字符一定小于0x81,此时该字符必定不是汉字,反之,该字符应该是一个汉字的首字节。

下面是网上找到的一个中英文混合字符串的截取的常用代码:

function gb_substr($str, $start, $len)
{
$s = '';
$j = 0;
for ($i=0; $iif (ord($str[$i]) & 0x81 != 0) { //或ord($str[$i]) > '0x80'
   $t = $str[$i].$str[$i+1];
   if (($i >= $start) && ($i+1 < $start+$len)) $s.= $t;
   $i++;
} else {
   $t = $str[$i];
   if (($i >= $start) && ($i < $start+$len)) $s.= $t;
}
if ($i >= $start+$len) break;
}
return $s;
}

STEP 3:utf-8编码的字串截取函数实现
PHP中没有函数可用,substr()力不从心,又因为UTF-8分别有1,2,3字节编码,中日韩文都是3字节编码,处理时根据字符编码中首字节大小区分字节数量。
下面是我的博客中用到的处理函数:
function substr_cn($str,$start=0,$len)
{
    $strlen=strlen($str);
    for($i=0;$i<$strlen;$i++)
    {
       if($i>=$start&&$i<($start+$len))
       {
        if(ord(substr($str,$i,1))>'0xE0')
        {
        $tmpstr.=substr($str,$i,3);    //utf-8 code
        $i=$i+2;
        }
        else
        $tmpstr.=substr($str,$i,1);
       }

    }
    if(strlen($tmpstr)>$len)
    {
       $len--;
       return substr_cn($str,$start,$len);
    }

    return $tmpstr;
}

STEP 4:相关的一个完整函数供研究使用:
function cut_str($sourcestr,$cutlength)
{
   $returnstr='';
   $i=0;
   $n=0;
   $str_length=strlen($sourcestr);//字符串的字节数
   while (($n<$cutlength) and ($i<=$str_length))
   {
      $temp_str=substr($sourcestr,$i,1);
      $ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
      if ($ascnum>=224)    //如果ASCII位高与224,
      {
         $returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符        
         $i=$i+3;            //实际Byte计为3
         $n++;            //字串长度计1
      }
      elseif ($ascnum>=192) //如果ASCII位高与192,
      {
         $returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
         $i=$i+2;            //实际Byte计为2
         $n++;            //字串长度计1
      }
      elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
      {
         $returnstr=$returnstr.substr($sourcestr,$i,1);
         $i=$i+1;            //实际的Byte数仍计1个
         $n++;            //但考虑整体美观,大写字母计成一个高位字符
      }
      else                //其他情况下,包括小写字母和半角标点符号,
      {
         $returnstr=$returnstr.substr($sourcestr,$i,1);
         $i=$i+1;            //实际的Byte数计1个
         $n=$n+0.5;        //小写字母和半角标点等与半个高位字符宽...
      }
   }
         if ($str_length>$cutlength){
          $returnstr = $returnstr . "...";//超过长度时在尾处加上省略号
      }
    return $returnstr;

}

<?php
header ( "content-type:text/html; charset=utf-8" );

    function strcut($string, $length, $dot = '...',$charset='utf-8')
        {

      $strlen = strlen($string);

      if($strlen <= $length) return $string;

      $strcut = '';

      if(strtolower($charset) == 'utf-8')

      {

      $n = $tn = $noc = 0;

      while($n < $strlen)

      {

      $t = ord($string[$n]);

      if($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) {

      $tn = 1; $n++; $noc++;

      } elseif(194 <= $t && $t <= 223) {

      $tn = 2; $n += 2; $noc += 2;

      } elseif(224 <= $t && $t <= 239) {

      $tn = 3; $n += 3; $noc += 3;

      } elseif(240 <= $t && $t <= 247) {

      $tn = 4; $n += 4; $noc += 4;

      } elseif(248 <= $t && $t <= 251) {

      $tn = 5; $n += 5; $noc += 5;
      } elseif($t == 252 || $t == 253)
      {
        $tn = 6; $n += 6; $noc += 6;
      }
      else
      {

      $n++;

      }
      if($noc >= $length) break;
      }
      if($noc > $length) $n -= $tn;
      $strcut = substr($string, 0, $n);

      }
      else
      {
        $dotlen = strlen($dot);
        $maxi = $length - $dotlen - 1;

        for($i = 0; $i < $maxi; $i++)
        {
          $strcut .= ord($string[$i]) > 127 ? $string[$i].$string[++$i] : $string[$i];
        }
      }
      var_dump($strcut);
      return $strcut;
        }
        echo "jjjkkklll";
        echo strcut("向kk向向向kk向向向kk向向kkklllllllllllmmmmmmmmmmmmmmm向东阳",12)


?>

<?php
$dir = @ opendir("software");

while (($file = readdir($dir)) !== false)
  {
  echo "filename: " . $file."\n";
  }
  closedir($dir);
?>
第一范式的目标是确保每列的原子性
如果每列都是不可再分的最小数据单元(也称为最小的原子单元),则满足第一范式(1NF)

第二范式要求每个标只描述一件事。
除了主建外其他列都依赖于主建


第三范式
如果一个关系满足2NF,并除了主建以外的其他列都不传值依赖于主建。

其实范式是关系型数据的基本知识.  
  1Nf--第1范式就是没有表中有表,即二维表就可以了  
  2Nf--第2范式就是表中没有重复列.  
  3Nf--第3范式就是没有传递依赖,表中所有列都函数依赖于主关键字.(比如,表a(ID,sum1,Sid,a1),表b(Sid,a1)例子中ID为表a的关键字,Sid为表b的关键字.  
  我们说表a传递依赖于表b,应该规范为表a(ID,sum1,Sid),表b(Sid,a1)  
  
  一般要求关系表能够满足第3范式就可以了.  


膘哥网上有更详细的介绍内容:
http://neatstudio.com/show-288-1.shtml
http://neatstudio.com/show-291-1.shtml
http://neatstudio.com/show-664-1.shtml
http://neatstudio.com/show-666-1.shtml

第一范式及第二范式的依赖问题截图:
点击在新窗口中浏览此图片
天堂海()  10:05:58
大家有没有遇到mkdir时,如果文件夹已经存在,就报错
莫莫()  10:07:20
先判断啊
莫莫()  10:07:24
总是这样的
申寒光()  10:07:38
if exist
膘叔()  10:12:48
file_exists
is_dir

膘叔(19129540)  10:12:55
都可以判断的吧?
软件:
zend fro eclipse,ESFTP
功能:
本机编写好代码,然后通过ESFTP上传(单个文件或者多个文件或者目录)到开发机。没有ESFTP就还得rz这个软件不错。。呵呵!

对zend for Eclipse 建立通过svn导出的工程(这个在FILE->NEW->PROJECT->SVN->Project from svn->create a new repository local ->next->URL填入:https://svn.intra.sina.com.cn/space/develop/APP_PHP/trunk (这个trunk下面有 pengyou,deamon,framework,不能写到https后面,因为后面还得要选trunk下面的目录,密码啥的可能得输入)  next 弹出一个框,大意就是是否显示异常的目录和其他版本,这儿选择否NO,列出目录后:选择pengyou ,点击finish,选择:check out as a project with the name specified,点finish,点选pengyou 点击OK,开始从svn中检出了)。在修改后通过对文件上点击右键,Team commit。
研究了两宿的MSN协议(http://msnpiki.msnfanatic.com/index.php/Main_Page),终于搞定了一个稳定高效的msn好友列表导入程序,为啥说最稳定高效呢,这是我试过一些别人的实现后对比得到的,通常遇到的问题有两种:一个是非常慢,甚至被MSN服务器给挂起不断开,二是在面对一个用户有五六百个好友(比如我)的时候,就会以失败告终,经过不断调试和修改,最终这些问题都搞定了,甚是愉快!

几点收获:1. 低版本的协议更快,更好用 2. 面对超多好友的时候,避免挂起需要对ILN和MSG同时进行判断 3.命令行执行比web执行更可靠 4.必要的调试功能太重要了 5.为避免用户体验不佳,最好在获取好友列表的时候,使用HDN 隐身状态

提示: 索要代码暂时不提供,部分代码可能涉及公司代码安全,可以就具体问题和我讨论

参看:http://www.toplee.com/blog/71.html/comment-page-3#comment-31512
鄙人先后在CERNET做过拨号接入,在Yahoo&3721搞过搜索前端,在猫扑处理过mop.com的架构升级,在6.cn视频网站从事开发工作,还在多年的工作中接触和开发过不少大中型网站的模块,因此在大型网站应对高负载和并发的解决方案上有一些积累和经验,希望和大家一起探讨。

老乡那么牛的人都研究了两晚,一个msn导入想到高效的实现,可见对工作的态度和责任值得我学习啊。
[概述]

自5.1开始对分区(Partition)有支持,6.0应比较稳定阅读全文
zend studio 11.0.1 CSDN破解:
http://download.csdn.net/download/meiqing520/7844645
zend studio 11.0.1 如何实现汉化的?
汉化:
Help->
install new software...->
点击右边的Add按钮->
在弹框中
name栏里写ZH_CN
在Location里写http://download.eclipse.org/technology/babel/update-site/R0.12.0/juno/

然后点击ok
这时会提示pending...(等待...),
等侍完成后会出来很多语言列表让你选择,
请选择“Babel Language Packs in Chinese(Simplified)”简体中文包选择项,
阅读全文
用的是Zend for Eclipse 6.0 和 SVN进行PHP的开发。最近一个周,我突然发现一个奇怪的现象,以前在ZEND的文件浏览窗里无法显示文件的相关函数和类信息,在outline窗口里也是没有内容显示,同时,代码提示功能也没有了,一直不解是怎么回事,在网上搜索了好几次,没有任务人提到这个问题,看来这个问题比较少见,没办法,只好自己解决了。

先分析表象。我在ZEND又建立了一个新项目,这里我发现在新的项目没有这个问题,而在原来的项目里还是有问题,两个项目都开着,看来不是编辑器出错了。

无聊之际,我分别打开两个项目的文件夹,比较后发现,新项目文件夹里的.settings目录里的内容和原项目里的不一样,新项目里多了几个文件,分别是:
com.zend.php.javabridge.core.prefs
org.eclipse.core.resources.prefs
org.eclipse.php.core.projectOptions.prefs
老项目里只有一个文件,我想,问题出在这里?如是我把这三个文件都复制到老项目的相应文件夹里,并替换了已经存在的一个文件,于是我兴冲冲再次打开Zend,可是,可是,问题依旧!

唉,看来还有其它的问题,经常仔细比对后,发现新项目下的.project文件与老项目里的.project文件不同,新项目下的.project里引用了上面的说的三个文件,而老项目里没有,于是,我用新项目下的.project替换了老项目下的,再次打开,嘿嘿,搞掂了!

事后再想想,原来有一次,不知什么原因在用SVN update的时候,提示.project文件有错,于是我把这个文件删除了,之后,zend自动重建了一个,重建后的文件就跟以前不一样了,问题了就出现了!

唉!

情况二:
解决办法:
复制一个正常项目下的 .settings目录和.project文件替换有问题的项目里的同名目录和文件即可!

我自己以前解决方法是:
newproject --》project contents:
user default:  directory的后面加上斜杠即可。
好像新版本没有这个问题。
附录:
这个问题应该不是一个问题,所以大家提得比较少,要想使用代码提示等相关内容,必需以php项目的方式导出svn的项目。再最新的ZFE里边自带svn,check out时选择以新项目的方式检出,同时设定项目类型为PHP。

其实你可以分别new 两个项目,一个以php方式,一个以普通项目。对比一下就发现原因了。


不知道什么原因,Zend Studio Eclipse 的代码自动补全功能(Code Assist)不能用了,也无法通过 Ctrl点击 类定位。
最近尝试 PHP5.3RC 一直在折磨 Zend Studio Eclipse 。

Google 一番以后找到解决方法如下:
将工程的 .project 文件打开, <buildspec> <natures> 替换成以下内容:
<buildspec>
          <buildcommand>
               <name>org.eclipse.php.core.PhpIncrementalProjectBuilder</name>
               <arguments>
               </arguments>
          </buildcommand>
     </buildspec>
<natures>
<nature>org.eclipse.php.core.PHPNature</nature>
</natures>
然后重新 build 工程。

国际惯例,方法的出处是:https://www.zend.com/en/forums/index.php?t=msg&goto=15534


单击某变量其他相同变量也变灰的标记恢复办法:
File Switch Workspace:[修改回原来的文件目录即可,默认就有这个功能,只是在开发中变更后可能就没有这个默认功能]
C:\Documents and Settings\jackxiang\Zend\workspaces\DefaultWorkspace
来源:http://www.qgy18.com/tag/fiddler/
在测试或者优化web应用时,经常需要替换一些静态资源,如css/image/js等。当然,这些工作是在开发环境来做,直接ftp替换也没什么问题。但有的时候仅仅是想调研一下而不想影响环境的稳定,或者想方便的对比两段代码效果,就可以利用一个小工具来完成工作——Fiddler。
还有一个抓包工具wireshark :
抓包工具
wireshark 非常详细的抓包工具,缺点是在拦截http的post数据上传时看不到上传的数据格式
Fiddler  微软开发的专用于拦截http请求的工具,亮点功能在于:1.可以直接查看到get\post数据的内容 2.可以以多种方式浏览数据(text\xml\json) 3.可以直接模拟请求 包括模拟agent或者其他自定义头---一句话,非常强大的工具,信不信由你,我反正信了。
================================================================================
先来简单的介绍下Fiddler(官网&#124;需要.NET Framework v2.0&#124;MicroSoft出品):一个集web性能分析、数据监测、自动响应、创建请求四大功能于一身,自带众多实用小工具,支持插件扩展的HTTP调试工具。通过简单的配置代理(IE中全自动、FF中需如下图手动配置),就可以开始使用Fiddler了。
在火狐浏览器菜单栏的“工具(T)”->"选项(O).."->“高级”->“网络”->"设置(E)..."下选择“手动配置代理”
点击在新窗口中浏览此图片


这篇文章讲的只是利用fiddler来替换静态资源,利用的是它的自动响应功能。选择软件右侧的AutoResponder这个tab,点“Add”按钮来添加一条规则,在Rule Editor里的文本框填上要被替换资源的url,后面的文本框选择源文件就OK了。如下图:

点击在新窗口中浏览此图片

搞定,就这么简单,现在只要请求被命中,就会被转发到指定的源文件了。修改代码后保存一下F5就能生效,既方便又不会影响到他人。这个功能挖掘下还可以干一些其它有意思的事情:配置Rule时,选择转发404之类的错误码,就可以用来测试Ajax的onError事件;把类似于Http://www.***.com/1.html这样的url转发到本地页面,就可以在本地代码里用Ajax请求www.***.com的内容。由于本地页面是通过Http://www.***.com/1.html来访问,不再有跨域问题了。这在做一个获取数据程序的时候很有用。虽说最后还是要用后端程序来解决跨域问题,但开发前期利用Fiiddler做转发,非常的高效!


用它做Flash的Post上传调试:
1)打开fiddle2
2)Flash进行POST上传下
3)查看Fiddle:左边选 URl,右边点Inspector里的WebForms,下面看Response里的:TextView,如果是Json可以远json这一项能看到json格式给你封装展现好了的,也就是让你看到POST后的返回相关的数值。
Array
(
    [Filename] => video-2013-03-20-07-54-44.mp4
    [upload_file_name] => video-2013-03-20-07-54-44.mp4
    [upload_file_content_type] => application/octet-stream
    [upload_file_path] => /data/app/test.local/upload_tmp/0051067597
    [upload_file_md5] => 17e71fff75f6fe211d95e1f486e7185b
    [upload_file_size] => 25302039
    [Upload] => Submit Query
)

其实上面还可以粗略看到Flash上传的一个协议,如相当于web里的form表单中的file域:
------------gL6Ef1gL6GI3Ef1cH2GI3gL6gL6KM7
Content-Disposition: form-data; name="Filename"

video-2013-03-20-07-54-44.mp4
------------gL6Ef1gL6GI3Ef1cH2GI3gL6gL6KM7
Content-Disposition: form-data; name="upload_file"; filename="video-2013-03-20-07-54-44.mp4"
Content-Type: application/octet-stream
分页: 243/339 第一页 上页 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 下页 最后页 [ 显示模式: 摘要 | 列表 ]