大流量程序设计与实现--系列四

1、首页静态化

   后台管理我们的内容:增加、删除、修改、查询

   1.1 前台首页面,手动更新!

       点击更新缓存,就访问一次newsList.php,去数据库把数据查询出来,然后echoob缓存中

       利用ob缓存ob_get_contents();

       file_put_contents把内容保存到../index.html,就是前端的首页

   1.2 插入或者更新后,就立刻自动更新缓存

       只需要在newsAction.php(插入数据)里面,添加include "newsList.php";

       cannot modify header has already send waring,

       这个是因为写了多次header("content-type:text/html;charset:utf-8");

   1.3 有些日排行榜,一天只需要更新一次,就做个定时器,定期更新首页。

   1.4 真静态优缺点:

       1.4.1 利于seo

       1.4.2 访问速度快:不用查数据库,不用执行php模块,防止sql注入

       1.4.3 生成大量的html文件,占用磁盘空间。如果所以的文件都放入

             同一个文件夹,就会出问题。应该按照年月日来分开。

             linuxsave_mode打开,那么创建文件夹权限失败。

             门户网站:新闻、文章查询cms,基本都要用真静态

       1.4.4 不适用真静态:

             1.4.4.1 网站或页面实时性很高,如股票、基金每秒就更新

             1.4.4.2 数据量很大,同时一次查询一次后,以后很少查询

             1.4.4.3 电信查询系统,因为查询很少,而且每个月一般只查询一次。

             1.4.4.4 有些网站是保密的,不希望被seo抓取

2、伪静态技术:

    2.1 不需要真静态,但是希望利于seo,就可以使用伪静态

    2.2 实现方式,直接使用正则表达式来完成

    2.3 apache/nginx 自带的rewrite机制来完成

3、正则表达式:

    输入的url是:

    http://www.1366768.com/blog.php/1,2,332,12.html

    但是后台处理时当成

    http://www.1366768.com/blog.php/a=1&b=2&c=332&d=12.html

    3.1 可以用string处理 str_split(); 但是这个不灵和,安全性不高

        <?php

        echo "<pre>";

        print_r($_SERVER);

        echo "</pre>";

    3.2 使用正则来处理。

        $str = "asadklfja:3423:;sdf5555sd:3443:as2222df2:003kjrui32982";

        //查找字符串中连续4个数的内容 3423 5555 3443 2222 3298

        $reg = '/\d\d\d\d/i';

        preg_match($reg, $str, $match);

        print_r($match);

        //将会打出3423

        preg_match_all($reg, $str, $match);

        print_r($match);

        //将会打出 3423 5555 3443 2222 3298

        $reg = '/(\d)\d\d\d/i'; //这样的话,就又不一样了

    3.3 概念:

        1. 字表达式

        2. 捕获

        3. 反向引用

        $reg = '/(\d)\d\d\d/i';

        这里的(\d)就是字表达式,字表达试会被捕获起来

        eg:

        $str = "ret11111sadfa-asdfad222-asd5555fa333";

        找出连续的相同的3个数字

        //说明:正则规范的格式:/规范/i i表示匹配时,不区分大小写

        \d 表示任意一个数字0-9,

        (\d)表示一个字表达式

        \1 代表反向引用,或者说是:第一个表达式的内容,应该出现的内容

        {3} 表示出现3

        字表达式

        $reg = '/(\d)\1{3}/i';

        preg_match($reg, $str, $match);

        print_r($match);

        //实例0

        $str="111-222-333ksadf;k333-222-444kfjs";

        //xxx-yyy-zzz

        $reg = '/(\d)\1{2}-(\d)\2{2}-(\d)\3{2}/i';

        preg_match($reg, $str, $match);

        print_r($match);

        //实例1

        $str="111-575-111ksadf;k333-060-333kfjs";

        //xxx-yzy-xxx

        //$reg = '/(\d)\1{2}-(\d)(\d)\2-\1{3}/i';

        $reg = '/(\d)\1{2}-(\d)\d\2-\1{3}/i';

        preg_match($reg, $str, $match);

        echo "<pre>";

        print_r($match);

        /*

        Array

        (

            [0] => 111-575-111

            [1] => 1   //就是第一个子表达式的内容

            [2] => 5   //就是滴二个字表达式的内容

        )

        */

        //实例2

        $str="111-575-111ksadf;k333-060-333kfjs";

        //xxx-yzy-xxx

        $reg = '/(\d)\1{2}-(\d)\d\2-\1{3}/i';

        preg_match_all($reg, $str, $match);

        echo "<pre>";

        print_r($match);

        /*

        Array

        (

            [0] => Array

                (

                    [0] => 111-575-111

                    [1] => 333-060-333

                )

            [1] => Array

                (

                    [0] => 1

                    [1] => 3

                )

            [2] => Array

                (

                    [0] => 5

                    [1] => 0

                )

        )

        */

        //match[0][0] 存放第一个匹配结果

        //match[0][1] 存放第二个匹配结果

        //match[1][0] 存放第一个匹配结果的第一个字表达式结果

        //match[m][n] 存放第n+1个匹配结果的第m字表达式结果

        //实例3

        $str = "hcl1125113015@163.com";

        /*

          1. 必须有@

          2. @前面是a-z,或者A-Z或者_字符,或者0-9

          3. 要求必须是163 或者qq 或者sina

          4. 必须有后缀是com或者cn

          

          [] 一个字符

          + 代表出现多个,一个以上

          ^ 必须以它紧跟后面的规则字符 开头

          $ 必须以它紧跟前面的规则字符 结束

          | (com|cn)出现com或者cn

          \. 出现.,如果不转义,.匹配除了\n外的任意字符

        */

        $reg = "/^([a-zA-Z0-9_]+)@(163|qq|sina)\.(com|cn)$/i";

        if(preg_match($reg, $str, $match) == 1){

          echo "是电子邮件";

          echo "<pre>";

          print_r($match);

        }else{

          echo "电子邮件非法";

        }

        /*

          $reg = "/^([a-zA-Z0-9_]+)@(163|qq|sina)\.(com|cn)$/i";

          是电子邮件

          Array

          (

              [0] => hcl1125113015@163.com

              [1] => hcl1125113015

              [2] => 163

              [3] => com

          )

          $reg = "/^([a-zA-Z0-9_])+@(163|qq|sina)\.(com|cn)$/i";

          是电子邮件

          Array

          (

              [0] => hcl1125113015@163.com

              [1] => 5

              [2] => 163

              [3] => com

          )

        */

    3.4 正则规则:

        /*

        元字符--限定符

            ? 01

            * 0到多

            + 1到多

            {n} 限定出现的次数

            {m, n}

        元字符--字符匹配:

            [a-z]

            [^a-z]表示除了字母之外任意一个的字符

            \d == [0-9]

            \D \d相反

            \w == [a-zA-Z0-9]

            \W \w相反

            \s 所有空白字符(空格、tab)

            \S \s相反

            . 匹配除\n之外的所有字符,如果要匹配.就要\.

            [.]+ 匹配一个任意字符

            .+   匹配任意多个字符序列,一般不要写成[.]

            [\d\D] 就表示所有的任意一个字符

        元字符--定位符

            \b 匹配目标字符的边界:子串有空格或者字符串的结束位置,

               特别注意:没有字符串开始位置

               如:"hclsdf sshcl dfasdhcl"

               规则是:'/hcl\b/gi';

               那么将会匹配后面两个hcl

            \B 匹配目标字符串的非边界

               规则是:'/hcl\B/gi';

               那么将会匹配第一个hcl

        元字符--转义符

            \  需要转义的字符有:.*+?^$()[]{}/\

        元字符--选择符

            |

        */

    3.5 正则规范是根本的规范(元字符是通用的),可以用在js\php\asp\jsp\c++\shell

        数据输入时候:应该在客户端(js)验证,然后再在服务端(php)验证,这样才更安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值