wecenter开启静态化代码

二次开发 wecenter 文章 2019-12-09 21:59 0 295

说道网站优化,提高网站速度,需要从很多地方出发。

比如wecenter,它的查询太多,查询出来的字段也非常多,这其实是很占效率的。

但是我们没有办法改变它,毕竟作者这么写了,就算你优化完,升级后还是会回复的。

所以我们要做的就是如何减少数据库查询。

那在编程语言里来说,减少数据库查询,那肯定就是用缓存。

但是并不是所有人的服务器或空间都支持内存缓存的,所以我们这里用纯静态化缓存。这也有助于CDN加速。比如如下图:

image.png

废话不多说,我们开始教大家如何编写这段代码。

打开 / system/function.app.php 

追加方法:

 function createHtmlFile($FilePath,$Content){    
    // 去掉文件名中的一些非法符号
    $FilePath = preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', $FilePath);  

    $dir_array = explode("/",$FilePath);  

    //split the FilePath
    $max_index = count($dir_array) ;
    $i = 0;
    $path = $_SERVER['DOCUMENT_ROOT']."/";  // 获取网站的根目录,比如/home/username/

    while( $i < $max_index ){
        $path .= "/".$dir_array[$i];    // 把子目录一级一级加到路径上
        $path = str_replace("//","/",$path);  // 如果有//则替换成/

        if( $dir_array[$i] == "" ){  // 如果这目录值为空则跳过去,这个判断放在循环的最前面可能更合适
            $i ++ ;
            continue;
        }
        // 上面的代码似乎可以写得更精练

        if( substr_count($path, '&') ) return true;  // 如果路径中有&符号,这不好处理,不管了
        if( substr_count($path, '?') ) return true;  // 有?也不管了
        if( !substr_count($path, '.htm') ){     // 如果不包含.htm,原来传了个路径进来
          
            if( !file_exists( $path ) ){        
                @mkdir( $path, 0777);
                @chmod( $path, 0777 );
            }
        }
        $i ++;  // 这个搞完,继续
    }

    if( is_dir( $path ) ){  //  如果上面折腾完后,发现是个目录,那就是说要创建index.html
        $path = $path."/index.html";
    }
	
    // 如果html页面没创建完整,那还是不管算了
    if ( !strstr( strtolower($Content), '</html>' ) ) return;   

    //if sql error ignore...
    $fp = @fopen( $path , "w+" );  
    if( $fp ){  // 说明有权限写
        @chmod($path, 0666 ) ;  // 给文件先赋个权限
        @flock($fp ,LOCK_EX );  // 锁定
        // write the file。
        fwrite( $fp , $Content );// 写静态文件内容
        @flock($fp, LOCK_UN);   // 解锁
        fclose($fp);            // 完事
     }
}


第二步打开:/app/article/main.php

在index_action方法的最后

TPL::output('article/index');

修改为:

$content = TPL::output('article/index',false);
//这里的/a/ 是指在网站下面生成一个a的文件夹,然后生成静态文件,具体叫啥自己修改
createHtmlFile('/a/'.$article_info['id'].'.html',$content);
echo $content;


-EOF-