碧海长天

好看的皮囊千篇一律,有趣的灵魂万里挑一。

laravel页面静态化 支持其他各种框架。

2017-12-14

由于公司业务需要,对官网进行了页面静态化。同时在此记录下方法。
服务器环境: centos 7.3 apache   PHP7.1  框架:laravel5.3 
基本要求:
1.apache rewrite 必须得开启的.
2. .htaccess 重写     

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
         若是单一入口文件,应该都是有这个配置的,尤其是第一句话:RewriteCond %{REQUEST_FILENAME} !-f   意思是,如果不存在和REQUEST_FILENAME 匹配的文件,才跳转至index.php
3.以laravel为例: 在public文件下创建zixun文件夹,并给777权限。  这种父级目录得人工创建, 因为给public目录 777权限的化过于可怕。
4.上代码:    
//生成静态页方法
function create_static_page($path,$file_name,$content){
   if(is_dir($path)){
    $file_name = handle_file_name($path,$file_name);
    file_put_contents($file_name, $content);
    chmod($file_name,0777);  
   }   
  return $content;
}
//删除静态页方法
function delete_static_page($file){
  if(is_file($file)){
    unlink($file);
  }
}
//清空目录下所有静态页方法
function delete_all_static_page($path){
    $file_path=scandir($path);
    foreach ($file_path as  $value) {
      if($value!='.' &&$value!='..')  
      {  
        delete_static_page(handle_file_name($path,$value));
      } 
    }
}
//文件路径处理函数
function handle_file_name($path,$file_name){
  if(substr($path, -1,1)=='/'){
      return $path.$file_name;
    }else{
      return $path.'/'.$file_name;
  }
}
5.方法举例:( laravel的看这里!)
    laravel的视图在渲染输出时的函数     
return view('zixun/article');
这里是直接把渲染好的视图输出了,我们截断它。
换成:
$string = view('zixun/article')__toString();
return create_static_page(public_path().'/zixun',$id.'.html',$string);

意思就是,将渲染好的内容,传给我的 静态页方法来处理。
如果你的文件权限、方法调用什么的都没问题,那在public/zixun 下面应该就生成了对应的html文件。

这样你访问对应的url时,就访问的是静态页的内容了。  例如:  www.slidyy.com/zixun/111.html

6.静态页更新:
    通过删除对应的静态页来实现,因为没有该静态页了,自然访问的就是对应的控制器了。
    这里提供两个方法:
        1. delete_static_page  删除特定的静态页   例如delete_static_page(public_path().'/zixun/111.html');
        2. delete_all_static_page()  删除特定目录下的所有静态页  例如: delete_all_static_page(public_path().'/zixun/');
    


标签: 后端开发 PHP 页面静态化 laravel

评论:

旅程
2018-07-05 15:23
我可以转载这篇文章吗,谢谢了,怕到时候找不到
碧海长天
2018-07-05 22:37
@旅程:可以的,欢迎转载哈~ 注明来源就好~
旅程
2018-07-06 08:42
@碧海长天:哈哈,谢谢啦,注明了,https://www.jianshu.com/p/091fbcd9d95a这个
保罗
2018-01-01 02:03
2018 元旦快乐~
碧海长天
2018-01-02 11:02
@保罗:元旦没开电脑,回复的有点晚~~~   元旦快乐~
小轲
2017-12-28 18:40
我发现你站的速度可以飞起来了大佬~
碧海长天
2018-01-02 11:03
@小轲:额。。估计是阿里云带宽比较足吧  100M 的。。。不过也很烧流量啊

发表评论: