function createHtmlFile($FilePath,$Content){
// 去掉文件名中的一些非法符号
$FilePath = preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', $FilePath);
// if there is http:// $FilePath will return its bas path
// 分隔文件路径,比如/home/xxx/xxx/xxx/xxx.html,
// 如果是类似http://xxx.com/html/y2012/xxx.html,将传入/html/y2012/xxx.html
// (http://cn2.php.net/manual/zh/function.explode.php)
$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 is a directory
// 如果路径不存在,贱之,并赋读写运行权,如果存在,那八成也是这里贱的
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); // 完事
}
}
上面的这段放在 /system/functions.app.php 里
下面是调用的代码
$Content = TPL::output('tpl模板路径',false);
createHtmlFile("静态文件路径",$Content);
访问一次 就会生成了。
这个是有场景适用的。当然你可以选择部分静态化。
我的做法是把要静态化的部分 静态化到模板目录的文件夹里
然后通过加载模板的方式把内容加载到页面里。
$url111 = 'cache/文章ID.tpl.htm';
TPL::output($url111);
2015-09-08 09:49
2015-08-27 14:41
2015-08-27 14:37
2015-08-27 14:01
2015-08-27 12:57