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

今天自个儿写了个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' );   

[转]定义一个javascript类

今天使用zendstudio时,发现我以往的json的写法不支持,便重新找了下JS类定义的文章。便保存了下来。

» 阅读全文

Tags: javascript,

php 引用 & 使用教程

下面是来自其它网站的一款php 引用 & 使用教程哦,我现在把它发布过来给各位朋友看看吧,适合于php初学者哦,php &

PHP 的引用允许你用两个变量来指向同一个内容

PHP代码:

<?
$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC
$b="EFG";
echo $a;//这里$a的值变为EFG 所以输出EFG
echo $b;//这里输出EFG
?>


函数的传址调用
传址调用我就不多说了 下面直接给出代码

PHP代码:
function test(&$a)
{
$a=$a+100;
}
$b=1;
echo $b;//输出1
test($b);  //这里$b传递给函数的其实是$b的变量内容所处的内存地址,通过在函数里改变$a的值 就可以改变$b的值了
echo "<br>";
echo $b;//输出101


要注意的是,在这里test(1);的话就会出错,原因自己去想

函数的引用返回
先看代码

PHP代码:
function &test()
{
static $b=0;//申明一个静态变量
$b=$b+1;
echo $b;
return $b;
}

$a=test();//这条语句会输出 $b的值 为1
$a=5;
$a=test();//这条语句会输出 $b的值 为2

$a=&test();//这条语句会输出 $b的值 为3
$a=5;
$a=test();//这条语句会输出 $b的值 为6


下面解释下: 
通过这种方式$a=test();得到的其实不是函数的引用返回,这跟普通的函数调用没有区别 至于原因: 这是PHP的规定
PHP规定通过$a=&test(); 方式得到的才是函数的引用返回
至于什么是引用返回呢(PHP手册上说:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。) 这句狗屁话 害我半天没看懂

用上面的例子来解释就是
$a=test()方式调用函数,只是将函数的值赋给$a而已, 而$a做任何改变 都不会影响到函数中的$b
而通过$a=&test()方式调用函数呢, 他的作用是 将return $b中的 $b变量的内存地址与$a变量的内存地址 指向了同一个地方
即产生了相当于这样的效果($a=&b;) 所以改变$a的值 也同时改变了$b的值 所以在执行了
$a=&test();
$a=5;
以后,$b的值变为了5

这里是为了让大家理解函数的引用返回才使用静态变量的,其实函数的引用返回多用在对象中

对象的引用

PHP代码:

<?
class a{
 var $abc="ABC";
 }
$b=new a;
$c=$b;
echo $b->abc;//这里输出ABC
echo $c->abc;//这里输出ABC
$b->abc="DEF";
echo $c->abc;//这里输出DEF
?>


以上代码是在PHP5中的运行效果
在PHP5中 对象的复制 是通过引用来实现的。上列中$b=new a; $c=$b; 其实等效于$b=new a; $c=&$b;
PHP5中默认就是通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,PHP定义了一个特殊的方法,称为__clone.

引用的作用
如果程序比较大,引用同一个对象的变量比较多,并且希望用完该对象后手工清除它,个人建议用 "&" 方式,然后用$var=null的方式清除. 其它时候还是用php5的默认方式吧. 另外, php5中对于大数组的传递,建议用 "&" 方式, 毕竟节省内存空间使用。


取消引用
当你 unset 一个引用,只是断开了变量名和变量内容之间的绑定。这并不意味着变量内容被销毁了。例如:

<?php
$a = 1;
$b =& $a;
unset ($a);
?> 

不会 unset $b,只是 $a。


global 引用
当用 global $var 声明一个变量时实际上建立了一个到全局变量的引用。也就是说和这样做是相同的:

<?php
$var =& $GLOBALS["var"];
?> 

这意味着,例如,unset $var 不会 unset 全局变量。

$this
在一个对象的方法中,$this 永远是调用它的对象的引用。


//下面再来个小插曲
php中对于地址的指向(类似指针)功能不是由用户自己来实现的,是由Zend核心实现的,php中引用采用的是“写时拷贝”的原理,就是除非发生写操作,指向同一个地址的变量或者对象是不会被拷贝的。

通俗的讲
1:如果有下面的代码

PHP代码:
$a="ABC";
$b=$a;


其实此时 $a与$b都是指向同一内存地址 而并不是$a与$b占用不同的内存

2:如果在上面的代码基础上再加上如下代码

PHP代码:
$a="EFG";


由于$a与$b所指向的内存的数据要重新写一次了,此时Zend核心会自动判断 自动为$b生产一个$a的数据拷贝,重新申请一块内存进行存储

Tags: php, 引用, 教程

PHP写的飞信API接口,不需要第三方API

PHP写的飞信API接口,不需要第三方API。网上找到的。保留以便于以后使用。呵呵。

» 阅读全文

Tags: 飞信api

【转】谈谈验证码识别技术

由于现在很多网站,为了加强安全性,以及防止程序的自动操作网站,都加入的了验证码技术。但却给广大站长推广宣传网站带来的麻烦。所以我准备写这篇关于验证码识别技术的文章,不足之处在所难免!本人从来不写东西,今天为了想落伍才写了!

     广大站长宣传推广自己的网站,经常要发布一些宣传广告,如果靠人工,太慢太昂贵,所以理想的办法是使用群发软件,可现在很多网站都有验证码,这成为群发软件的技术难点,而识别也就难点中的难点,好的,闲话少说,言归正传!

    我举的例子是比较难于识别的验证码,不讨论不变形、不换字体、不换大小、不旋转的验证码,这里我可能不会写出代码,只是提供我编写的思路,按照这个思路,我写出的程序,比市场上出售的程序的识别率还要高很多。(有兴趣的可以问我,我不想在这里帮别人宣传,呵呵~~)

    首先以数字验证码开始,字母的要比数字麻烦一些,不过搞清楚了数字验证码的识别,字母的也就不难了。

    验证码一般都是图片,而且一般都是4位数,处理过程是:先分割为4个部分,然后逐一识别,由于分割比较简单,我这里就不说了,我这里只说如何识别。

    我的方法是把需要识别的图片,划分为 5 行,3 列,15个块,为什么要划分为15个块呢?先看图!
○■○
■○■
■○■
■○■
○■○

○■○
■■○
○■○
○■○
■■■

■■■
○○■
■■■
■○○
■■■

■■■
○○■
■■■
○○■
■■■
我先举这4个例子吧,其余的大家可以自己画出来。如果做过验证码识别的朋友,肯定很快就明白为什么划分为15个块,其实主要就是因为这样划分更合理,也就更能提高识别率。

    我的方法是把需要识别的图片,划分为 5 行,3 列,15个块,然后对每个块进行计算,当每个块里的有效象素超过多少百分比的时候,就标记为 ■,如果没超过就标记为○,(这里为了显示方便我使用了■,○,你完全可以把它标为1、0),这里要注意一下,这里的百分比根据字体的粗细可以取 67%,50%,33%,20%,为什么要取这几个数?主要和计算机的浮点数运算有关,选这几个数,运算更快,且不容易出错,否则计算机在进行大量计算时也是会出错的!当然这里,你完全可以选适合你的验证码图片的百分比!!

    如果验证码不变形、不换字体、不换大小、不旋转,我们的识别工作到这一步基本上就结束了,因为已经可以得到比较清晰的块图,对付大多数论坛,就已经足够了。^_^

   如果验证码的变形比较大、且有很多字体、大小也不固定、且有旋转,那么我们经过划分、取比率显示后,可能会得到这样一个图:
○■○
○○■
○■○
■○○
■■■
    那么这个数字应该是什么数字,我们需要使用排除法!排除所有不可能,在0123456789中,这个图不可能是013456789,他只能是 :2。

    写过验证码识别的朋友可能已经明白了!是的,我们需要建立一个类似的数据库,也就是识别库,出现哪些图,他就属于那个数字。
   再举一个例子:
○■○
■○○
■■■
■○■
○■○
     这是什么?,没错

     我这里我需要再说明一下为什么要取5行,3列,15个块,因为块太多了你 的识别库就会很大,块太少了,就会出现很多分不清楚的块图。

    另外你取的百分比也需要注意,不能太大也不能太小。

     好了,等做好自己的数据库,这时就可以识别大部分数字了。

    最后还有一个问题,就是重复的问题,比如,图片上的数字,明明是 5,可由于它的字体不是常见的字体,且发生了旋转,最后得到这样一个图:
■■■
■○○
■■■
■○■
■■■
   在我的数据库里,这个块图,是6,也是就说识别错误,怎么办?

    我的解决方法是,在数据库里先把这条数据删除因为这个是错误的。

    遇到这种情况,就需要进行二次处理,我的方法是:降低百分比,这时就得到了:
■■○
■○○
■■○
○○■
■■○
     OK,经过降低百分比,图片就由“6”又变为“5”了,呵呵~~~由于降低了百分比,我们需要再建立一个识别库的来存储这些数据。

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ycyangcai/archive/2007/06/20/1658896.aspx

Tags: 验证码识别

PHP中如何发送HEADER头消息

PHP中我们经常需要通过HEADER发送HTTP标头消息,以便告诉浏览器一些处理状态(Status)或显示参量,最典型的就是发送页面处理HEADER和发送状态HEADER。
无论是发送哪种HEADER消息,都必须保证在发送HEADER之前没有输出任何信息到终端浏览器。

一、使用HEADER发送文本类型头信息
例1:
<?php
header("Content-Type: text/html; charset=UTF-8");//告知各位观众下面将要输出的文本类型
?>
例 1输出HEADER告诉浏览器将要输出的文本编码格式为UTF-8。这在全页面PHP处理上是必须的,否则可能会引起终端浏览器显示乱码或空白页显示现象。由于PHP指定在HEADER输出前不能有任何输出信息,包括空格,所以当页面运行出现HEADER信息已经发送的提示时候,需要首先检查在 HEADER之前是否输出了某些信息,包括本PHP页面的包含头文件是否输出信息。
如果需要输出文件提示下载可使用如下方法:
<?php
header("Content-type: application/octet-stream");//FILE流
header("Accept-Ranges: bytes");
header("Accept-Length: $filesize");//提示将要接收的文件大小
header("Content-Disposition: attachment; filename=".$fname); //提示终端浏览器下载操作
?>
如果是PDF格式也可用header("Content-type: application/pdf");其它格式类似处理,不过上面的例子是个下载文件流通例,但是指定详细的文本格式似乎对浏览器的默认处理似乎更好,比如让播放器自动播放下载音乐、或PDF编辑器自动打开远程PDF文档等。

附Content-type的MIME类型说明:
 <?php
$mimetypes = array(
        'ez' => 'application/andrew-inset',
        'hqx' => 'application/mac-binhex40',
        'cpt' => 'application/mac-compactpro',
        'doc' => 'application/msword',
        'bin' => 'application/octet-stream',
        'dms' => 'application/octet-stream',
        'lha' => 'application/octet-stream',
        'lzh' => 'application/octet-stream',
        'exe' => 'application/octet-stream',
        'class' => 'application/octet-stream',
        'so' => 'application/octet-stream',
        'dll' => 'application/octet-stream',
        'oda' => 'application/oda',
        'pdf' => 'application/pdf',
        'ai' => 'application/postscript',
        'eps' => 'application/postscript',
        'ps' => 'application/postscript',
        'smi' => 'application/smil',
        'smil' => 'application/smil',
        'mif' => 'application/vnd.mif',
        'xls' => 'application/vnd.ms-excel',
        'ppt' => 'application/vnd.ms-powerpoint',
        'wbxml' => 'application/vnd.wap.wbxml',
        'wmlc' => 'application/vnd.wap.wmlc',
        'wmlsc' => 'application/vnd.wap.wmlscriptc',
        'bcpio' => 'application/x-bcpio',
        'vcd' => 'application/x-cdlink',
        'pgn' => 'application/x-chess-pgn',
        'cpio' => 'application/x-cpio',
        'csh' => 'application/x-csh',
        'dcr' => 'application/x-director',
        'dir' => 'application/x-director',
        'dxr' => 'application/x-director',
        'dvi' => 'application/x-dvi',
        'spl' => 'application/x-futuresplash',
        'gtar' => 'application/x-gtar',
        'hdf' => 'application/x-hdf',
        'js' => 'application/x-javascript',
        'skp' => 'application/x-koan',
        'skd' => 'application/x-koan',
        'skt' => 'application/x-koan',
        'skm' => 'application/x-koan',
        'latex' => 'application/x-latex',
        'nc' => 'application/x-netcdf',
        'cdf' => 'application/x-netcdf',
        'sh' => 'application/x-sh',
        'shar' => 'application/x-shar',
        'swf' => 'application/x-shockwave-flash',
        'sit' => 'application/x-stuffit',
        'sv4cpio' => 'application/x-sv4cpio',
        'sv4crc' => 'application/x-sv4crc',
        'tar' => 'application/x-tar',
        'tcl' => 'application/x-tcl',
        'tex' => 'application/x-tex',
        'texinfo' => 'application/x-texinfo',
        'texi' => 'application/x-texinfo',
        't' => 'application/x-troff',
        'tr' => 'application/x-troff',
        'roff' => 'application/x-troff',
        'man' => 'application/x-troff-man',
        'me' => 'application/x-troff-me',
        'ms' => 'application/x-troff-ms',
        'ustar' => 'application/x-ustar',
        'src' => 'application/x-wais-source',
        'xhtml' => 'application/xhtml+xml',
        'xht' => 'application/xhtml+xml',
        'zip' => 'application/zip',
        'au' => 'audio/basic',
        'snd' => 'audio/basic',
        'mid' => 'audio/midi',
        'midi' => 'audio/midi',
        'kar' => 'audio/midi',
        'mpga' => 'audio/mpeg',
        'mp2′ => 'audio/mpeg',
        'mp3′ => 'audio/mpeg',
        'aif' => 'audio/x-aiff',
        'aiff' => 'audio/x-aiff',
        'aifc' => 'audio/x-aiff',
        'm3u' => 'audio/x-mpegurl',
        'ram' => 'audio/x-pn-realaudio',
        'rm' => 'audio/x-pn-realaudio',
        'rpm' => 'audio/x-pn-realaudio-plugin',
        'ra' => 'audio/x-realaudio',
        'wav' => 'audio/x-wav',
        'pdb' => 'chemical/x-pdb',
        'xyz' => 'chemical/x-xyz',
        'bmp' => 'image/bmp',
        'gif' => 'image/gif',
        'ief' => 'image/ief',
        'jpeg' => 'image/jpeg',
        'jpg' => 'image/jpeg',
        'jpe' => 'image/jpeg',
        'png' => 'image/png',
        'tiff' => 'image/tiff',
        'tif' => 'image/tiff',
        'djvu' => 'image/vnd.djvu',
        'djv' => 'image/vnd.djvu',
        'wbmp' => 'image/vnd.wap.wbmp',
        'ras' => 'image/x-cmu-raster',
        'pnm' => 'image/x-portable-anymap',
        'pbm' => 'image/x-portable-bitmap',
        'pgm' => 'image/x-portable-graymap',
        'ppm' => 'image/x-portable-pixmap',
        'rgb' => 'image/x-rgb',
        'xbm' => 'image/x-xbitmap',
        'xpm' => 'image/x-xpixmap',
        'xwd' => 'image/x-xwindowdump',
        'igs' => 'model/iges',
        'iges' => 'model/iges',
        'msh' => 'model/mesh',
        'mesh' => 'model/mesh',
        'silo' => 'model/mesh',
        'wrl' => 'model/vrml',
        'vrml' => 'model/vrml',
        'css' => 'text/css',
        'html' => 'text/html',
        'htm' => 'text/html',
        'asc' => 'text/plain',
        'txt' => 'text/plain',
        'rtx' => 'text/richtext',
        'rtf' => 'text/rtf',
        'sgml' => 'text/sgml',
        'sgm' => 'text/sgml',
        'tsv' => 'text/tab-separated-values',
        'wml' => 'text/vnd.wap.wml',
        'wmls' => 'text/vnd.wap.wmlscript',
        'etx' => 'text/x-setext',
        'xsl' => 'text/xml',
        'xml' => 'text/xml',
        'mpeg' => 'video/mpeg',
         'mpg' => 'video/mpeg',
        'mpe' => 'video/mpeg',
        'qt' => 'video/quicktime',
        'mov' => 'video/quicktime',
        'mxu' => 'video/vnd.mpegurl',
        'avi' => 'video/x-msvideo',
        'movie' => 'video/x-sgi-movie',
        'ice' => 'x-conference/x-cooltalk',
);
?>

二、使用HEADER发送状态(Status)信息
当我们在响应浏览器操作时候,可能需要输出一些提示状态信息,比如访问的文件不存(404状态)在或者文件被转移(301状态)等,告诉用户(包括搜索引擎)所访问页面的当前状态,这在实际使用中对站长非常重要,因为这直接影响到搜索引擎对当前页面的判定。当前对于301固定转移(HTTP/1.1 301 Moved Permanently)我们也可以采用其它方式(.htaccess或IIS重定向),但是了解PHP自编程解决这些页面状态提示会加深自己对浏览器状态的认知。
HEADER状态消息头格式如下:
header("第一部分 第二部分 第三部分");
其中第一部分为HTTP协议的版本号(HTTP-Version),第二部分为将要发送的状态代码(Status),第三部分为状态原因(Reason-Phrase) ,三部分中间用一个空格分割,第一部分和第二部分都是必需,第三部分的状态原因为可选项,一般推荐按照标准写出(参下文)。
例2:
<?php
header("HTTP/1.1 404 Not Found");
?>
例2实际在使用中很少用到的,感觉有点忽悠终端浏览者的意思。
最经常遇到是下面的例3:
<?php
header("HTTP/1.1 301 Moved Permanently");//301永久迁移
header("Location: http://www.metsky.com");//跳转新URL地址,默认Location可能会发送302头,笔者暂不确定。
?>
此语句告诉搜索引擎或浏览者,本页面已经被“蚂蚁搬家”了,走,我带你看看新家去(新网页)。更多关于301重定向的内容请参考完美解决IIS和APACHE的301重定向一文。

下面专门把W3上Header状态代码(Status)罗列一下供各位使用参考:
1、状态码类(Status)定义
1xx类:Informational - Request received, continuing process(信息状态码类:请求已收到,继续处理)
2xx类:Success - The action was successfully received, understood,and accepted(成功状态码类:本次操作已收到并处理OK)
3xx类:Redirection - Further action must be taken in order to complete the request (重定向状态码类:完成请求前必须进一步执行操作)
4xx类:Client Error - The request contains bad syntax or cannot be fulfilled(发往客户端的错误状态码类:请求包含语法错误或请求不能完成)
5xx类:Server Error - The server failed to fulfill an apparently valid request (服务器端的错误状态码类:服务器执行合法请求失败)

2、常用状态码(Status)列表(部分):
| "100" ; Continue
| "101" ; Switching Protocols

| "200" ; OK
| "201" ; Created
| "202" ; Accepted
| "203" ; Non-Authoritative Information
| "204" ; No Content
| "205" ; Reset Content
| "206" ; Partial Content

| "300" ; Multiple Choices
| "301" ; Moved Permanently
| "302" ; Moved Temporarily
| "303" ; See Other
| "304" ; Not Modified
| "305" ; Use Proxy
| "400" ; Bad Request
| "401" ; Unauthorized
| "402" ; Payment Required
| "403" ; Forbidden
| "404" ; Not Found
| "405" ; Method Not Allowed
| "406" ; Not Acceptable
| "407" ; Proxy Authentication Required
| "408" ; Request Time-out
| "409" ; Conflict
| "410" ; Gone
| "411" ; Length Required
| "412" ; Precondition Failed
| "413" ; Request Entity Too Large
| "414" ; Request-URI Too Large
| "415" ; Unsupported Media Type

| "500" ; Internal Server Error
| "501" ; Not Implemented
| "502" ; Bad Gateway
| "503" ; Service Unavailable
| "504" ; Gateway Time-out
| "505" ; HTTP Version not supported

另外我们还可以使用PHP 的HEADER发送一些缓存参数命令、超期命令等,例如:
<?php
header("Cache-Control: no-cache, must-revalidate"); //不要缓存
header("Expires: Fri, 1 Dec 2099 08:00:00 GMT"); // 页面过期时间
?>
在使用起来要简单一点,不再多讲,OVER,闪人。

Tags: php, header

新的框架设计思想

今天突然种想法、php 为什么要基于apache 来进行运行呢!这样就会使得每次php 都是一个新的进程在执行,其实我们可以做到一个进程来执行的目的,只要保证是一个在执行即可

自 WAP 发表

Mysql数据库表结构差异性对比工具(PHP版)

此工具用于对比MYSQL一个数据库的结构,可以对比出与另一个库的差异性。并能生成相关的SQL语句。

PS:现在索引差异性对比没有完成。主要完成了表结构中的字段名的差异性对比

下面是该工具的下载地址:

 

注意:要运行此工具,需要你有PHP环境。

 

2010年1月5日更新:

修复了附件,可以下载了。同时,这个版本是有索引差异性对比功能的版本。

网盘下载

http://www.brsbox.com/filebox/down/fc/983fdd7fefabe0a142b7d916bc52b5df

Tags: 表结构对比, 原创

Records:511234567