MyQianTu
(Myqiantu)
1
不知道在Yii中有没有自动生成静态HTML文件的方法。这在大型门户网站内容发布中经常使用到。如果没有,建议qiang整合之,有很好的价值,比缓存还好使一些。如果有,请告示如何使用。
静态文件生成,一般通常有两种机制,一种是后台触发生成,一种是前台访问,如果没有则调用静态文件生成。这些生成的文件最好可以存储在指定的Apache文件目录或者Nginx服务目录下,使之可以用纯HTML格式访问,而无需通过PHP解释执行。
另外如果实现图片服务器分离,需要把图片传输到远程指定服务器上,不清楚有无解决方案。
MyQianTu
(Myqiantu)
2
PHP Yii 中文群 群号:38352603中离家出走大侠的贡献方案,不过离家说比较山寨,但总比没有强,供参考和讨论,提供更多场景供qiang完善。
/**
* 生成一个html文件
* @param Book $book
* @param Chapter $chapter
* @return void
*/
public static function createHtml($book, $chapter)
{
$webAppPath = Yii::app()->params['webAppPath'];
$suffix = Yii::app()->params['staticSuffix'];
$typeId = IFileHelper::selfType($book->bookid);
$htmlFile = $webAppPath . 'read' . DS . $typeId . DS . $book->bookid . DS . $chapter->chapterid . $suffix;
$readTemplateFile = $webAppPath . 'themes' . DS . 'web' . DS . 'views' . DS . 'book' . DS . 'read.php';
if ($chapter->prevChapter($chapter->chapterid, $chapter->bookid))
{
$prevUrl = '/read/' . $typeId . '/' . $book->bookid . '/' . $chapter->prevChapter($chapter->chapterid, $chapter->bookid)->chapterid . $suffix;
}
if ($chapter->nextChapter($chapter->chapterid, $chapter->bookid))
{
$nextUrl = '/read/' . $typeId . '/' . $book->bookid . '/' . $chapter->nextChapter($chapter->chapterid, $chapter->bookid)->chapterid . $suffix;
}
$enterUrl = '/chapter/' . $book->bookid . $suffix;
$homeUrl = '/';
$showUrl = '/show/' . $book->bookid . $suffix;
$chapterUrl = '/chapter/' . $book->bookid . $suffix;
$chapterContent = $chapter->content;
ob_start();
include($readTemplateFile);
$content = ob_get_clean();
IFileHelper::createFile($htmlFile, $content);
}
qiang
(Qiang Xue)
3
你试过Yii的(完整)页面缓存没有?它的性能应该接近hello world。
MyQianTu
(Myqiantu)
4
页面缓存没有问题。不过在搜索引擎中,如果使用静态页生成会有更好的检索效果。但动态不清楚效果如何,应该比较难吧。
在流量大的时候,适当的静态文件生成或者动静结合,还可以采用多种性能优化方案。如果没有的话,可能还是在今后需要手工写程序来实现静态页生成的。但我觉得在框架上加一个扩展或者类包应该也可以实现这个哦。
只是一个提议,建议考虑在新的版本中能看到这个功能。感谢qiang的回复。。。
yzxh24
(Yzxh24)
5
-__,-搜索引擎根本分不出是真静态还是假静态,所以直接把整个页面缓存起来,然后用urlManager的重写功能将链接重写就行了,简单又方便!