QQ登录

只需一步,快速开始

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5374|回复: 5

[PHP开发] php页面静态化

[复制链接]

299

主题

316

帖子

1080

积分

中级会员

Rank: 3Rank: 3

积分
1080
发表于 2016-1-3 11:01:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
网站一直在加载,很慢,处理方式多种;
    0.页面静态化;
    1.优化数据库;
    2.负载均衡;
    3.使用缓存技术

关于页面静态化
    使用函数如 file_put_contents($filename,$string);
    php的输出缓冲区  开启 5.3以后默认开启 output_buffer      on
    没开启的话可以用 函数在页面开始  ob_start();
    eg:   
  1. ob_start();
  2. file_put_contents('index.html',ob_get_contents());
  3. ob_clean();


  4. ob_start();
  5. file_put_contents('index.html',ob_get_clean());

  6. //注意ob_start() 无论php.ini 有没有开启 output_buffering 设置,最还都要开启,及时已经为on ,也是开辟新的输出缓冲区
复制代码
关于如何触发系统生成纯静态页面
    方式有三种:
    0.页面添加缓存时间
        用户访问如index.php 判断index.html的修改时间 如当前时间差值 若大于设定的数值学访问index.php否则访问静态页面
  1. if(is_file('./index.html')&&time()-filemtime()<300){
  2.      require './index.html';
  3. }else{
  4.      ob_start();
  5.      ......
  6.     file_put_contents('./index.html',ob_get_contents());
  7. }
复制代码
1.手动触发
        同上不需要判断
    2.定时任务 crontab  
    定时任务前几天转载了一篇博客关于linux定时任务的

局部静态化
  1. <script>
  2.     $.ajax({
  3.         url:'',
  4.         type:'get',
  5.         dataType:'json',
  6.         error:function(){
  7.         },
  8.         success:function(result){
  9.             if(result.code==1){
  10.                 html='';
  11.                 $.each(result.data,function(key,value){
  12.                     html+='<li>'+value.title+'</li>'
  13.                 })
  14.                 $("#hot_html").html(html);
  15.             }else{
  16.                 //todo
  17.             }
  18.         },
  19.     })
  20. </script>
复制代码
伪静态
  1. <?php
  2. /**
  3. * 利用PHP正则表达式来处理伪静态
  4. * 以http://static.com/newsList.php?type=2&category_id=1 =>  http://static.com/newsList.php/2/1.shtml
  5. */
  6. //echo 12;
  7. var_dump($_SERVER);

  8. if(isset($_SERVER['PATH_INFO'])) {
  9.     // 解析 /2/1.shtml 匹配pathinfo值,如果没匹配到则数据不合法,若匹配到做相应处理
  10.     if(preg_match("/^\/(\d+)\/(\d+)(\.shtml)$/", $_SERVER['PATH_INFO'], $pathInfo)) {
  11.         //var_dump($pathInfo);
  12.         $type = $pathInfo[1]; // 类型值
  13.         $categoryId = $pathInfo[2]; // 所在栏目值
  14.         // 引入数据库链接类
  15.         require_once('./db.php');
  16.         $sql = "select * from news where `category_id` = ".$categoryId." and `type` = ".$type." order by id desc";
  17.         try{
  18.             $db = Db::getInstance()->connect();
  19.             $result = mysql_query($sql, $db);
  20.             $newsList = array();
  21.             while($row = mysql_fetch_assoc($result)) {
  22.                 $newsList[] = $row;
  23.             }
  24.             var_dump($newsList);
  25.             exit;
  26.         }catch(Exception $e) {
  27.             // TODO
  28.         }
  29.     } else {
  30.         // TODO
  31.         die('url error!');
  32.     }
  33. } else {
  34.     // TODO
  35.     // 错误提示,然后跳转到首页处理
  36.     die('地址有误');
  37. }
复制代码
路由重写
        apache 开启重写模块
        http.conf 中修改
            LoadModule rewrite_module modules/mod_rewrite.so
            Include conf/extra/httpd-vhosts.conf
        在httpd-vhosts.conf中设置
  1. <VirtualHost 127.0.0.19:80>
  2.     ServerName www.study.com
  3.     DocumentRoot "C:/wamp/www/study"
  4.     <Directory "C:/wamp/www/study">
  5.         Options Indexes
  6.         Order deny,allow
  7.         allow from all
  8.     </Directory>
  9.     #下面是重写时候若遇到目录文件下有该文件则显示文件
  10.     RewriteEngine on
  11.     RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
  12.     RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
  13.     #下面是重写规则    //nignx重写类似
  14.     RewriteRule ^/detail/([0-9]*).html$ /detail.php?id=$1
  15. </VirtualHost>
复制代码


0

主题

13

帖子

1446

积分

中级会员

Rank: 3Rank: 3

积分
1446

活跃会员

发表于 2016-1-3 11:45:35 | 显示全部楼层
感谢分享....

0

主题

9

帖子

1039

积分

中级会员

Rank: 3Rank: 3

积分
1039

活跃会员

发表于 2016-1-3 21:00:47 | 显示全部楼层
学习了!

0

主题

58

帖子

1101

积分

中级会员

Rank: 3Rank: 3

积分
1101

灌水之王

发表于 2016-1-5 10:54:37 | 显示全部楼层
为了摇一摇,版主坑了,要发东西才给摇
Life is the art of drawing without an eraser.

0

主题

2

帖子

7

积分

新手上路

Rank: 1

积分
7
发表于 2016-3-29 10:23:10 | 显示全部楼层
为何我这么菜  看不懂  

24

主题

32

帖子

110

积分

新手上路

Rank: 1

积分
110
QQ
发表于 2016-4-27 13:52:16 | 显示全部楼层
我一般都是用伪静态,不知道是不是相当于REWRITE规则的意思?
https://www.proginn.com/users/php/
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

     
    战略合作|联系方式|广告赞助|商务合作|手机版|小黑屋|( 京ICP备14036609号-6 )

GMT+8, 2017-10-19 06:10

© 2013-2017 Powered by Discuz! X3.3. 本站由 又拍云 提供 CDN 图片存储服务

快速回复 返回顶部 返回列表