zoukankan      html  css  js  c++  java
  • php 偶遇小问题合计

    一、php 各种进制的转换


    decbin -- 十进制转换为二进制
    说明:(PHP 3, PHP 4, PHP 5)
    string decbin ( int number )
    返回一字符串,包含有给定 number 参数的二进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 32 个 1 的字符串。

     

    decoct -- 十进制转换为八进制
    说明
    string decoct ( int number )
    返回一字符串,包含有给定 number 参数的八进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 "37777777777"。

     

    dechex -- 十进制转换为十六进制
    说明
    string dechex ( int number )
    返回一字符串,包含有给定 number 参数的十六进制表示。所能转换的最大数值为十进制的 4294967295,其结果为 "ffffffff"。

     

    bin2hex -- 将二进制数据转换成十六进制表示
    说明
    string bin2hex ( string str )
    返回 ASCII 字符串,为参数 str 的十六进制表示。转换使用字节方式,高四位字节优先。

     

    bindec -- 二进制转换为十进制
    说明
    number bindec ( string binary_string )
    返回 binary_string 参数所表示的二进制数的十进制等价值。
    bindec() 将一个二进制数转换成 integer。可转换的最大的数为 31 位 1 或者说十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数值,这种情况下,它会返回 float 类型。

     

    octdec -- 八进制转换为十进制
    说明
    number octdec ( string octal_string )
    返回 octal_string 参数所表示的八进制数的十进制等值。可转换的最大的数值为 17777777777 或十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。

     

    hexdec -- 十六进制转换为十进制
    说明
    number hexdec ( string hex_string )
    返 回与 hex_string 参数所表示的十六进制数等值的的十进制数。hexdec() 将一个十六进制字符串转换为十进制数。所能转换的最大数值为 7fffffff,即十进制的 2147483647。PHP 4.1.0 开始,该函数可以处理大数字,这种情况下,它会返回 float 类型。
    hexdec() 将遇到的所有非十六进制字符替换成 0。这样,所有左边的零都被忽略,但右边的零会计入值中

     

    base_convert -- 在任意进制之间转换数字
    说明
    string base_convert ( string number, int frombase, int tobase )
    返 回一字符串,包含 number 以 tobase 进制的表示。number 本身的进制由 frombase 指定。frombase 和 tobase 都只能在 2 和 36 之间(包括 2 和 36)。高于十进制的数字用字母 a-z 表示,例如 a 表示 10,b 表示 11 以及 z 表示 35。

     

    二、 call_user_func() 和 call_user_func_array() 用法

    call_user_func callback $function [, mixed $parameter [, mixed $... ]] ) 

    调用第一个参数所提供的用户自定义的函数。
    返回值:返回调用函数的结果,或FALSE。

    example:

    <?php
    function eat($fruit) //参数可以为多个
    {
         echo "You want to eat $fruit, no problem";
    }
    call_user_func('eat', "apple"); //print: You want to eat apple, no problem;
    call_user_func('eat', "orange"); //print: You want to eat orange,no problem;
    ?>

    调用类内部的方法:

    <?php
    class myclass {
         function say_hello($name)
         {
             echo "Hello!$name";
         }
    }
    
    $classname = "myclass";
    
    //调用类内部的函数需要使用数组方式 array(类名,方法名)
    call_user_func(array($classname, 'say_hello'), 'dain_sun');
    
    //print Hello! dain_sun
    
    ?>

     

    call_user_func_array 函数和 call_user_func 很相似,只是 使 用了数组 的传递参数形式,让参数的结构更清晰: 

    call_user_func_array callback $function array $param_arr 

    调用用户定义的函数,参数为数组形式。
    返回值:返回调用函数的结果,或FALSE。

    example:

    <?php
    
    function debug($var, $val)
    {
         echo "variable: $var <br> value: $val <br>";
         echo "<hr>";
    }
    
    
    $host = $_SERVER["SERVER_NAME"];
    $file = $_SERVER["PHP_SELF"];
    
    call_user_func_array('debug', array("host", $host));
    call_user_func_array('debug', array("file", $file));
    
    
    ?>

    调用类的内部方法和 call_user_func 函数的调用方式一样,都是使用了数组的形式来调用。

    <?php
    
    class test
    {
          function debug($var, $val)
          {
              echo "variable: $var <br> value: $val <br>";
              echo "<hr>";
          }
    }
    
    $host = $_SERVER["SERVER_NAME"];
    $file = $_SERVER["PHP_SELF"];
    
    call_user_func_array(array('test', 'debug'), array("host", $host));
    call_user_func_array(array('test', 'debug'), array("file", $file));
    
    ?>

     

    注:call_user_func 函数和call_user_func_array函数都支持引用。 

    <?php
    function increment(&$var)
    {
        $var++;
    }
    
    $a = 0;
    call_user_func('increment', $a);
    echo $a; // 0
    
    call_user_func_array('increment', array(&$a)); // You can use this instead
    echo $a; // 1
    ?>

     

     三、 截取中文字符串

    众所周知php原生函数substr是不支持截取中文字符串的。下面的代码提供了多种截取php中文字符串的方法。

    1. 截取GB2312中文字符串

    < ?php
    //截取中文字符串
    function mysubstr($str, $start, $len) {
        $tmpstr = "";
        $strlen = $start + $len;
        for($i = 0; $i < $strlen; $i++) {
            if(ord(substr($str, $i, 1)) > 0xa0) {
                $tmpstr .= substr($str, $i, 2);
                $i++;
            } else
                $tmpstr .= substr($str, $i, 1);
        }
        return $tmpstr;
    }
    ?>

    2. 截取utf8编码的多字节字符串

    < ?php
    //截取utf8字符串
    function utf8Substr($str, $from, $len)
    {
        return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$from.'}'.
                           '((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,'.$len.'}).*#s',
                           '$1',$str);
    }
    ?>

    或者

    function subString_UTF8($str, $start, $lenth)
    {
        $len = strlen($str);
        $r = array();
        $n = 0;
        $m = 0;
        for($i = 0; $i < $len; $i++) {
            $x = substr($str, $i, 1);
            $a  = base_convert(ord($x), 10, 2);
            $a = substr('00000000'.$a, -8);
            if ($n < $start){
                if (substr($a, 0, 1) == 0) {
                }elseif (substr($a, 0, 3) == 110) {
                    $i += 1;
                }elseif (substr($a, 0, 4) == 1110) {
                    $i += 2;
                }
                $n++;
            }else{
                if (substr($a, 0, 1) == 0) {
                    $r[ ] = substr($str, $i, 1);
                }elseif (substr($a, 0, 3) == 110) {
                    $r[ ] = substr($str, $i, 2);
                    $i += 1;
                }elseif (substr($a, 0, 4) == 1110) {
                    $r[ ] = substr($str, $i, 3);
                    $i += 2;
                }else{
                    $r[ ] = '';
                }
                if (++$m >= $lenth){
                    break;
                }
            }
        }
        return implode($r);
    } 

    3. UTF-8、GB2312都支持的汉字截取函数

    <?php
    /*
    Utf-8、gb2312都支持的汉字截取函数
    cut_str(字符串, 截取长度, 开始长度, 编码);
    编码默认为 utf-8
    开始长度默认为 0
    */
    
    function cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
    {
        if($code == 'UTF-8')
        {
            $pa = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
            preg_match_all($pa, $string, $t_string);
    
            if(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."...";
            return join('', array_slice($t_string[0], $start, $sublen));
        }
        else
        {
            $start = $start*2;
            $sublen = $sublen*2;
            $strlen = strlen($string);
            $tmpstr = '';
    
            for($i=0; $i< $strlen; $i++)
            {
                if($i>=$start && $i< ($start+$sublen))
                {
                    if(ord(substr($string, $i, 1))>129)
                    {
                        $tmpstr.= substr($string, $i, 2);
                    }
                    else
                    {
                        $tmpstr.= substr($string, $i, 1);
                    }
                }
                if(ord(substr($string, $i, 1))>129) $i++;
            }
            if(strlen($tmpstr)< $strlen ) $tmpstr.= "...";
            return $tmpstr;
        }
    }
    
    $str = "abcd需要截取的字符串";
    echo cut_str($str, 8, 0, 'gb2312');
    ?>

    4. BugFree 的字符截取函数

    < ?php
    /**
     * @package     BugFree
     * @version     $Id: FunctionsMain.inc.php,v 1.32 2005/09/24 11:38:37 wwccss Exp $
     *
     *
     * Return part of a string(Enhance the function substr())
     *
     * @author                  Chunsheng Wang <wwccss@263.net>
     * @param string  $String  the string to cut.
     * @param int     $Length  the length of returned string.
     * @param booble  $Append  whether append "...": false|true
     * @return string           the cutted string.
     */
    function sysSubStr($String,$Length,$Append = false)
    {
        if (strlen($String) < = $Length )
        {
            return $String;
        }
        else
        {
            $I = 0;
            while ($I < $Length)
            {
                $StringTMP = substr($String,$I,1);
                if ( ord($StringTMP) >=224 )
                {
                    $StringTMP = substr($String,$I,3);
                    $I = $I + 3;
                }
                elseif( ord($StringTMP) >=192 )
                {
                    $StringTMP = substr($String,$I,2);
                    $I = $I + 2;
                }
                else
                {
                    $I = $I + 1;
                }
                $StringLast[] = $StringTMP;
            }
            $StringLast = implode("",$StringLast);
            if($Append)
            {
                $StringLast .= "...";
            }
            return $StringLast;
        }
    }
    
    $String = "17test.info 走在中国自动化测试的前沿";
    $Length = "18";
    $Append = false;
    echo sysSubStr($String,$Length,$Append);
    ?>

    四、中英字符串长度计算

    一个字符串 就是由一系列的字符组成,因此,一个字符就是一个字节,而字符串中的中文和编码有关,gbk是双字节,utf8是三字节。

    php中有strlen()和mb_strlen()两个函数来计算字符串的长度。

    1、strlen()和mb_strlen()在字符全是英文字符的时候,功能是一样的,两者的区别主要在中英文混排的时候,这两个会产生两个不同的结果,接下来看个测试例子:

    <?php 
    $str="A中B文C字D符E"; 
    echo strlen($str); 
    echo "<br />"; 
    echo mb_strlen($str,"UTF8"); 
    //输出结果 
    //17 
    //9 
    ?>

    从结果中我们可以看出:strlen()方法计算时将一个utf8编码的中文字符当做3个字符,所以"A中B文C字D符E"的长度为3*4+5=17

    而用mb_strlen()方法计算时,选定内码为UTF8,则会将一个utf8编码的中文字符长度当做1来计算,所以它计算出来的长度为9;

    中英文混排串的占位符计算:

    一个中文字符的占位是2,英文字符是1,如果一个混排的字符串有m个中文,n个英文,占位计算为:

    <?php 
    $str="A中B文C字D符E"; 
    //公式如下
    echo (strlen($str)+mb_strlen($str))/2; 
    //输出结果 13
    ?>

    php内置的字符串长度函数strlen无法正确处理中文字符串,它得到的只是字符串所占的字节数。对于gb2312的中文编码,strlen得到的值是汉字个数的2倍,而utf8编码的中文就是3倍差异

    采用mb_strlen函数可以很好的解决这个问题,它的第二个可选参数用于指定字符编码。例如得到utf8的字符串$str的长度,可以用mb_strlen($str,'UTF-8')。如果省略第二个参数,则会使用php的内部编码,内部编码可以通过mb_internal_encoding()函数得到,需要注意的是mb_strlen函数并不是php核心函数,使用前需要确保php.ini中加载了php_mbstring.dll,即确保“extension=php_mbstring.dll”这一行存在并没有被注释掉,否则会出现未定义函数的问题

     

    php翻转字符串的探讨

    /** 
    * 反转utf8的字符串,使用mb开头的函数 
    * @param string $str 
    * @return string 
    */  
    function mb_strrev($str) {  
        $len = mb_strlen($str, 'UTF-8');  
        $string = '';  
        for ($i = $len - 1; $i >= 0; $i--) {  
           $string .= mb_substr($str, $i, 1, 'UTF-8');                                                           
        }  
        return $string;  
    }  
    
    /** 
    * 反转utf8的字符串,使用正则和数组实现 
    * @param string $str 
    * @return string</p><p>*/  
    </p><p>  
    function utf8_strrev($str, $reverse_numbers = true){  
        $pattern = $reverse_numbers ? '/./us' : '/(\d+)?./us';  
        preg_match_all($pattern, $str, $ar);  
        return join('',array_reverse($ar[0]));  
    }  

    php编码判断讨论

    判断中文和编码有关,gbk是双字节,utf8是三字节,可以根据中文的编码范围来判断

    1.GBK(gb2312/gb18030) [\x80-\xff]

    2.UTF-8(Unicode)  [\u4e00-\u9fa5]

    五、获取某张图片的信息

    getimagesize — 取得图像大小

    array getimagesize ( string $filename [, array &$imageinfo ] )

    getimagesize() 函数将测定任何 GIFJPGPNGSWFSWCPSDTIFFBMPIFFJP2JPXJB2JPCXBM 或 WBMP 图像文件的大小并返回图像的尺寸以及文件类型和一个可以用于普通 HTML 文件中 IMG 标记中的 height/width 文本字符串。

    如果不能访问 filename 指定的图像或者其不是有效的图像, getimagesize() 将返回 FALSE 并产生一条 E_WARNING 级的错误。

    本函数不需要 GD 图像库。

    返回一个具有四个单元的数组。

    索引 0 包含图像宽度的像素值。

    索引 1 包含图像高度的像素值。

    索引 2 是图像类型的标记:1 = GIF,2 = JPG,3 = PNG,4 = SWF,5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),9 = JPC,10 = JP2,11 = JPX,12 = JB2,13 = SWC,14 = IFF,15 = WBMP,16 = XBM。这些标记与 PHP 4.3.0 新加的 IMAGETYPE 常量对应。

    索引 3 是文本字符串,内容为“height="yyy" width="xxx"”,可直接用于 IMG 标记。

    <?php
    $pic = 'http://www.baidu.com/img/baidu_sylogo1.gif';
    $size = getimagesize($pic);
    var_dump($size);
    ?>
    Array
    (
        [0] => 270
        [1] => 129
        [2] => 1
        [3] => width="270" height="129"
        [bits] => 4
        [channels] => 3
        [mime] => image/gif
    )

     六、Apache错误页面404、403配置教程

     摘自:http://www.leapsoul.cn/?p=591

    在PHP网站开发中,在用户访问网站出错、找不到页面时,会出现HTTP 404,403错误信息,为了提高用户体验,我们需要自定义404、403错误页面,提示用户下一步操作或自动跳转至合适的访问页面。

      自定义错误页面404、403的方法,主要通过apache或者htaccess进行配置,htaccess配置错误页面的方法适合虚拟主机用户。下面详细介绍错误页面404、403的配置教程。

      apache和htaccess设置404、403错误页面的方法基本一样,如使用htaccess进行配置,注意开启htaccess配置功能,具体请参考PHP推荐教程:使用apache和htaccess对目录访问设置密码保护配置教程

    错误页面404、403配置方法

      1、打开apache httpd.conf配置文件或者新建.htaccess配置文件

      2、添加如下信息

    1 ErrorDocument 403 /leapsoulcn403.html
    2 
    3 ErrorDocument 404 /leapsoulcn404.html

      3、保存apache httpd.conf或者htaccess配置文件,并重启apache

      4、在网站根目录新建leapsoulcn403.html和leapsoulcn404.html文件

    其他说明

      你也可以在网站访问页面出现404、403错误信息时,自动跳转至首页或另一个网站,方法如下

    1 ErrorDocument 403 /index.php
    2 
    3 ErrorDocument 404 http://www.leapsoul.cn

    上述配置信息,设置在发生HTTP 403错误时,自动跳转至网站首页,发生HTTP 404错误时自动跳转至PHP教程网

      当然出于用户体验性方面的考虑,不推荐做自动跳转至首页或者其他网站的设置。

      至此通过apache或者htaccess进行错误页面404、403的配置工作就完成了。

    七、http页面错误含义

    http错误代码含义:

    "100" : Continue 
    "101" : witching 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" : Found 
    "303" : See Other 
    "304" : Not Modified 
    "305" : Use Proxy 
    "307" : Temporary Redirect 
    
    HTTP 400 - 请求无效 
    HTTP 401.1 - 未授权:登录失败 
    HTTP 401.2 - 未授权:服务器配置问题导致登录失败 
    HTTP 401.3 - ACL 禁止访问资源 
    HTTP 401.4 - 未授权:授权被筛选器拒绝 
    HTTP 401.5 - 未授权:ISAPI 或 CGI 授权失败 
    
    HTTP 403 - 禁止访问 
    HTTP 403 - 对 Internet 服务管理器 (HTML) 的访问仅限于 Localhost 
    HTTP 403.1 禁止访问:禁止可执行访问 
    HTTP 403.2 - 禁止访问:禁止读访问 
    HTTP 403.3 - 禁止访问:禁止写访问 
    HTTP 403.4 - 禁止访问:要求 SSL 
    HTTP 403.5 - 禁止访问:要求 SSL 128 
    HTTP 403.6 - 禁止访问:IP 地址被拒绝 
    HTTP 403.7 - 禁止访问:要求客户证书 
    HTTP 403.8 - 禁止访问:禁止站点访问 
    HTTP 403.9 - 禁止访问:连接的用户过多 
    HTTP 403.10 - 禁止访问:配置无效 
    HTTP 403.11 - 禁止访问:密码更改 
    HTTP 403.12 - 禁止访问:映射器拒绝访问 
    HTTP 403.13 - 禁止访问:客户证书已被吊销 
    HTTP 403.15 - 禁止访问:客户访问许可过多 
    HTTP 403.16 - 禁止访问:客户证书不可信或者无效 
    HTTP 403.17 - 禁止访问:客户证书已经到期或者尚未生效 
    HTTP 404.1 - 无法找到 Web 站点 
    HTTP 404 - 无法找到文件 
    HTTP 405 - 资源被禁止 
    HTTP 406 - 无法接受 
    HTTP 407 - 要求代理身份验证 
    HTTP 410 - 永远不可用 
    HTTP 412 - 先决条件失败 
    HTTP 414 - 请求 - URI 太长 
    HTTP 500 - 内部服务器错误 
    HTTP 500.100 - 内部服务器错误 - ASP 错误 
    HTTP 500-11 服务器关闭 
    HTTP 500-12 应用程序重新启动 
    HTTP 500-13 - 服务器太忙 
    HTTP 500-14 - 应用程序无效 
    HTTP 500-15 - 不允许请求 global.asa 
    Error 501 - 未实现 
    HTTP 502 - 网关错误

     

    1xx - 信息提示

      这些状态代码表示临时的响应。客户端在收到常规响应之前,应准备接收一个或多个 1xx 响应。     100 - 继续。 
      101 - 切换协议。 
      2xx - 成功

    2xx - 成功
    这类状态代码表明服务器成功地接受了客户端请求。    

      200 - 确定。客户端请求已成功。 
        201 - 已创建。 
        202 - 已接受。 
        203 - 非权威性信息。 
        204 - 无内容。 
        205 - 重置内容。 
        206 - 部分内容。

    3xx - 重定向
      客户端浏览器必须采取更多操作来实现请求。例如,浏览器可能不得不请求服务器上的不同的页面,或通过代理服务器重复该请求。     302 - 对象已移动。   304 - 未修改。 
      307 - 临时重定向。 

    4xx - 客户端错误
      发生错误,客户端似乎有问题。例如,客户端请求不存在的页面,客户端未提供有效的身份验证信息。 
      400 - 错误的请求。 
      401 - 访问被拒绝。IIS 定义了许多不同的 401 错误,它们指明更为具体的错误原因。这些具体的错误代码在浏览器中显示,但不在 IIS 日志中显示:        401.1 - 登录失败。 
      401.2 - 服务器配置导致登录失败。 
      401.3 - 由于 ACL 对资源的限制而未获得授权。 
      401.4 - 筛选器授权失败。 
      401.5 - ISAPI/CGI 应用程序授权失败。 
      401.7 – 访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。 

      403 - 禁止访问:IIS 定义了许多不同的 403 错误,它们指明更为具体的错误原因:     403.1 - 执行访问被禁止。 
      403.2 - 读访问被禁止。 
      403.3 - 写访问被禁止。 
      403.4 - 要求 SSL。 
      403.5 - 要求 SSL 128。 
      403.6 - IP 地址被拒绝。 
      403.7 - 要求客户端证书。 
      403.8 - 站点访问被拒绝。 
      403.9 - 用户数过多。 
      403.10 - 配置无效。 
      403.11 - 密码更改。 
      403.12 - 拒绝访问映射表。 
      403.13 - 客户端证书被吊销。 
      403.14 - 拒绝目录列表。 
      403.15 - 超出客户端访问许可。 
      403.16 - 客户端证书不受信任或无效。 
      403.17 - 客户端证书已过期或尚未生效。 
      403.18 - 在当前的应用程序池中不能执行所请求的 URL。这个错误代码为 IIS 6.0 所专用。 
      403.19 - 不能为这个应用程序池中的客户端执行 CGI。这个错误代码为 IIS 6.0 所专用。 
      403.20 - Passport 登录失败。这个错误代码为 IIS 6.0 所专用。 

      404 - 未找到。     404.0 -(无) – 没有找到文件或目录。 
      404.1 - 无法在所请求的端口上访问 Web 站点。 
      404.2 - Web 服务扩展锁定策略阻止本请求。 
      404.3 - MIME 映射策略阻止本请求。 

      405 - 用来访问本页面的 HTTP 谓词不被允许(方法不被允许) 
      406 - 客户端浏览器不接受所请求页面的 MIME 类型。 
      407 - 要求进行代理身份验证。 
      412 - 前提条件失败。 
      413 – 请求实体太大。 
      414 - 请求 URI 太长。 
      415 – 不支持的媒体类型。 
      416 – 所请求的范围无法满足。 
      417 – 执行失败。 
      423 – 锁定的错误。 

    5xx - 服务器错误

    服务器由于遇到错误而不能完成该请求。     500 - 内部服务器错误。     500.12 - 应用程序正忙于在 Web 服务器上重新启动。 
        500.13 - Web 服务器太忙。 
        500.15 - 不允许直接请求 Global.asa。 
        500.16 – UNC 授权凭据不正确。这个错误代码为 IIS 6.0 所专用。 
        500.18 – URL 授权存储不能打开。这个错误代码为 IIS 6.0 所专用。 
        500.100 - 内部 ASP 错误。 

        501 - 页眉值指定了未实现的配置。 
        502 - Web 服务器用作网关或代理服务器时收到了无效响应。     502.1 - CGI 应用程序超时。 
        502.2 - CGI 应用程序出错。application. 

        503 - 服务不可用。这个错误代码为 IIS 6.0 所专用。 
        504 - 网关超时。 
        505 - HTTP 版本不受支持。 

    常见的 HTTP 状态代码及其原因
        200 - 成功。 此状态代码表示 IIS 已成功处理请求。 
        304 - 未修改。 客户端请求的文档已在其缓存中,文档自缓存以来尚未被修改过。客户端使用文档的缓存副本,而不从服务器下载文档。 
        401.1 - 登录失败。 登录尝试不成功,可能因为用户名或密码无效。 
        401.3 - 由于 ACL 对资源的限制而未获得授权。 这表示存在 NTFS 权限问题。即使您对试图访问的文件具备相应的权限,也可能发生此错误。例如,如果 IUSR 帐户无权访问 C:\Winnt\System32\Inetsrv 目录,您会看到这个错误。 有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    187506 INFO: IIS 4.0 的基础 NTFS 权限  
        403.1 - 执行访问被禁止。 下面是导致此错误信息的两个常见原因:     您没有足够的执行许可。例如,如果试图访问的 ASP 页所在的目录权限设为“无”,或者,试图执行的 CGI 脚本所在的目录权限为“只允许脚本”,将出现此错误信息。若要修改执行权限,请在 Microsoft 管理控制台 (MMC) 中右击目录,然后依次单击属性和目录选项卡,确保为试图访问的内容设置适当的执行权限。 
        您没有将试图执行的文件类型的脚本映射设置为识别所使用的谓词(例如,GET 或 POST)。若要验证这一点,请在 MMC 中右击目录,依次单击属性、目录选项卡和配置,然后验证相应文件类型的脚本映射是否设置为允许所使用的谓词。 

        403.2 - 读访问被禁止。验证是否已将 IIS 设置为允许对目录进行读访问。另外,如果您正在使用默认文件,请验证该文件是否存在。 有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    247677 错误信息:403.2 Forbidden:Read Access Forbidden(403.2 禁止访问:读访问被禁止)  
        403.3 - 写访问被禁止。 验证 IIS 权限和 NTFS 权限是否已设置以便向该目录授予写访问权。有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    248072 错误信息:403.3 Forbidden:Write Access Forbidden(403.3 禁止访问:写访问被禁止)  
        403.4 - 要求 SSL。禁用要求安全通道选项,或使用 HTTPS 代替 HTTP 来访问该页面。如果没有安装证书的 Web 站点出现此错误,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    224389 错误信息:HTTP 错误 403、403.4、403.5 禁止访问:要求 SSL  
        403.5 - 要求 SSL 128。禁用要求 128 位加密选项,或使用支持 128 位加密的浏览器以查看该页面。如果没有安装证书的 Web 站点出现此错误,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    224389 错误信息:HTTP 错误 403、403.4、403.5 禁止访问:要求 SSL  
        403.6 - IP 地址被拒绝。您已把您的服务器配置为拒绝访问您目前的 IP 地址。 有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    248043 错误信息:403.6 - Forbidden:IP Address Rejected(403.6 - 不可用:IP 地址被拒绝)  
        403.7 - 要求客户端证书。您已把您的服务器配置为要求客户端身份验证证书,但您未安装有效的客户端证书。 有关其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    190004 错误 403.7 或“Connection to Server Could Not Be Established”(无法建立与服务器的连接) 
    186812 PRB:错误信息:403.7 Forbidden:Client Certificate Required(403.7 禁止访问:要求客户端证书)  
        403.8 - 站点访问被拒绝。您已为您用来访问服务器的域设置了域名限制。有关如何解决此问题的其他信息,请单击下面的文章编号,查看 Microsoft 知识库中相应的文章: 
    248032 错误信息:Forbidden:Site Access Denied 403.8(禁止访问:站点访问被拒绝 403.8)  
        403.9 - 用户数过多。与该服务器连接的用户数量超过了您设置的连接限制。 有关如何更改此限制的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
    248074 错误信息:Access Forbidden:Too Many Users Are Connected 403.9(禁止访问:连接的用户太多 403.9) 
    注意:Microsoft Windows 2000 Professional 和 Microsoft Windows XP Professional 自动设置了在 IIS 上最多 10 个连接的限制。您无法更改此限制。 
        403.12 - 拒绝访问映射表。 您要访问的页面要求提供客户端证书,但映射到您的客户端证书的用户 ID 已被拒绝访问该文件。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
    248075 错误信息:HTTP 403.12 - Access Forbidden:Mapper Denied Access(HTTP 403.12 - 禁止访问:映射表拒绝访问)  
        404 - 未找到。 发生此错误的原因是您试图访问的文件已被移走或删除。如果在安装 URLScan 工具之后,试图访问带有有限扩展名的文件,也会发生此错误。这种情况下,该请求的日志文件项中将出现“Rejected by URLScan”的字样。 
        500 - 内部服务器错误。 很多服务器端的错误都可能导致该错误信息。事件查看器日志包含更详细的错误原因。此外,您可以禁用友好 HTTP 错误信息以便收到详细的错误说明。 有关如何禁用友好 HTTP 错误信息的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
    294807 如何在服务器端禁用 Internet Explorer 5 的“显示友好 HTTP 错误信息”功能  
        500.12 - 应用程序正在重新启动。 这表示您在 IIS 重新启动应用程序的过程中试图加载 ASP 页。刷新页面后,此信息即会消失。如果刷新页面后,此信息再次出现,可能是防病毒软件正在扫描 Global.asa 文件。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
    248013 错误信息:HTTP Error 500-12 Application Restarting(HTTP 错误 500-12 应用程序正在重新启动)  
        500-100.ASP - ASP 错误。 如果试图加载的 ASP 页中含有错误代码,将出现此错误信息。若要获得更确切的错误信息,请禁用友好 HTTP 错误信息。默认情况下,只会在默认 Web 站点上启用此错误信息。有关如何在非默认的 Web 站点上看到此错误信息的其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章: 
    261200 显示 HTTP 500 错误信息,而不显示 500-100.asp 的 ASP 错误信息  
        502 - 网关错误。 如果试图运行的 CGI 脚本不返回有效的 HTTP 标头集,将出现此错误信息。

     八、ob_start(), ob_get_content(), ob_end_clean()等的用法

    bool ob_start ([ callback $output_callback [, int $chunk_size [, bool $erase ]]] )

      此函数将打开输出缓冲。当输出缓冲是活跃的时候,没有输出能从脚本送出(除http标头外),相反输 出的内容被存储在内部缓冲区中。

    string ob_get_contents ( void )  

      只是得到输出缓冲区的内容,但不清除它。 返回值: 只是得到输出缓冲区的内容,但不清除它。

    void ob_clean ( void )

      此函数用来丢弃输出缓冲区中的内容。此函数不会销毁输出缓冲区,而像 ob_end_clean() 函数会销毁输出缓冲区。

    bool ob_end_clean ( void )

      此函数丢弃最顶层输出缓冲区的内容并关闭这个缓冲区。如果想要进一步处理缓冲区的内容,必须在 ob_end_clean()之前调用 ob_get_contents(),因为当调用ob_end_clean()时缓冲区内容将被丢弃。  返回值: 成功时返回 TRUE, 或者在失败时返回 FALSE. 错误的原因首先是,在调用时没有一个起作用的缓冲区,或者是因为某些原因缓冲区不能被删除(可能对特殊缓冲区而言)。

    void ob_flush ( void )

      这个函数将送出缓冲区的内容(如果里边有内容的话)。如果想进一步处理缓冲区中的内容,必须在 ob_flush()之前调用 ob_get_contents() ,因为在调用ob_flush()之后缓冲区内容将被丢弃。  此函数不会销毁输出缓冲区,而像 ob_end_flush() 函数会销毁缓冲区。

    bool ob_end_flush ( void )

      这个函数将送出最顶层缓冲区的内容(如果里边有内容的话),并关闭缓冲区。如果想进一步处理缓冲区中的内容,必须在 ob_end_flush()之前调用ob_get_contents(),因为在调用 ob_end_flush()后缓冲区内容被丢弃。  返回值: 成功时返回 TRUE, 或者在失败时返回 FALSE. 错误的原因首先是,在调用时没有一个起作用的缓冲区,或者是因为某些原因缓冲区不能被删除(可能对特殊缓冲区而言)。

     string ob_get_clean ( void )

      得到当前缓冲区的内容并删除当前输出缓冲区。  ob_get_clean() 实质上是一起执行了 ob_get_contents() 和 ob_end_clean()。  返回值:  返回输出缓冲区的内容,并结束输出缓冲区。如果输出缓冲区不是活跃的,即返回 FALSE 。

    string ob_get_flush ( void )

      ob_get_flush() 刷出(送出)缓冲区内容,以字符串形式返回内容,并关闭输出缓冲区返回值: 返回输出缓冲区的内容;或者是,如果没有起作用的输出缓冲区,返回FALSE 。

    int ob_get_length ( void ) 

      此函数将返回输出缓中冲区内容的长度。  返回值: 返回输出缓冲区内容的长度;或者返回FALSE——如果没有起作用的缓冲区。

    int ob_get_level ( void )

      返回输出缓冲机制的嵌套级别。  返回值: 返回嵌套的输出缓冲处理程序的级别;或者是,如果输出缓冲区不起作用,返回零。

    array ob_get_status ([ bool $full_status = FALSE ] )

      ob_get_status()返回最顶层输出缓冲区的状态信息;或者如果full_status设为TRUE,返回所有有效的输出缓冲级别。

     

     

    九、验证浏览器的类型

    内容摘自: http://feilong.org/php-check-ie-or-other-browsers

    PHP 检测客户端浏览器类型和版本和语言的方法。

    echo $_SERVER["HTTP_ACCEPT_LANGUAGE"];echo ' | '; //判断语言
    echo $_SERVER["HTTP_USER_AGENT"];echo ' | ';//判断检测客户端浏览器类型

    if判断的通用写法

    if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE") ) {
    //这里就填上你要在IE中执行的html代码
    }

    其他几个浏览器检查检测:

    <?php
    strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 8.0");
    strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 7.0");
    strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 6.0");
    strstr($_SERVER["HTTP_USER_AGENT"], "NetCaptor");
    strstr($_SERVER["HTTP_USER_AGENT"], "Netscape");
    strstr($_SERVER["HTTP_USER_AGENT"], "Lynx");
    strstr($_SERVER["HTTP_USER_AGENT"], "Opera");
    strstr($_SERVER["HTTP_USER_AGENT"], "Konqueror");
    strstr($_SERVER["HTTP_USER_AGENT"], "Mozilla/5.0");
    strstr($_SERVER["HTTP_USER_AGENT"], "Firefox");
    strstr($_SERVER["HTTP_USER_AGENT"], "Firefox/3");
    strstr($_SERVER["HTTP_USER_AGENT"], "Firefox/2");
    strstr($_SERVER["HTTP_USER_AGENT"], "Chrome");
    ?>

    实际应用举例:用php实现提醒客户端ie6用户升级到ie8的代码。

    ie6升级弹出窗警告。

    if(strstr($_SERVER["HTTP_USER_AGENT"], "MSIE 6.0") )
    
    echo '<script type="text/javascript">
    alert("还在用IE6 ? 你OUT了,赶快升级吧!")
    </script> ';
    
    }

     

    十、 跨行字符串

    <?php
      $str=<<<STR
      Your content here.
      STR;
      echo STR;
    ?>&nbsp;

     

     

     

     

     

     

     

  • 相关阅读:
    asp.net读取/导入project(mpp)文件
    hdu2103
    hdu2100(大数加)
    hdu1406
    hdu1249
    hdu1038
    hdu2565
    hdu1203
    zoj3501
    hdu2102
  • 原文地址:https://www.cnblogs.com/zjfazc/p/2746195.html
Copyright © 2011-2022 走看看