您好,欢迎访问一九零五行业门户网

php简单静态页生成过程_PHP教程

一、用到的相关技术关键词:php, apache,
                                               mod_rewrite (rewritecond,rewriterule)地址重写,
                                               ob系列函数缓冲
                                               file_put_contents生成html
二、流程:用户发出请求url?id=x ,判断文章是否存在
                        (1)存在则直接转到对应的html页面。
                        (2)不存在通过php读取数据库数据,然后生成html文件,并存放到指定目录。
三、实现方法:
(1)地址重写用apahce的mod_rewrite模块中的rewriterule指令实现重写(mod_rewrite的开启和简单规则见本博另一篇http://hi.baidu.com/alex%5fwang5 ... 0346ffb3fb952e.html )。
(2)判断文章是否存在用apahce 的mod_rewrite模块中的rewritecond指令
(3)生成html文件:
           ob_star()打开缓冲,将读取文章的php包含进来,然后用file_put_contents将获得的缓冲内容写入指定html文件。
四、代码
/test 目录下的 .htaccess 文件内容:
rewriteengine on
rewriterule ^index.html$ /news.php [l]
rewritecond %{request_filename}  !-s
rewriterule ^html/news_([0-9]+).html$ getnews.php?id=$1 [l]
对news.php的访问将通过 localhost/test/index.html 实现由第二句 rewriterule ^index.html$ test/news.php [l] 实现
news.php =============================> news.php将列出文章标题链接。
复制代码 代码如下:
比如生成了php静态页实现
当点击链接发出对 http://localhost/test/html/news_3.html 的请求时
apache将会判断 news_3.html  是否存在,由 .htaccess中的第三句 
rewritecond %{request_filename}  !-s 
实现:
rewritecond  是“定向重写发生条件”。request_filename 这个参数是“客户端请求的文件名”
'-s'  (是一个非空的常规文件[size]) 测试指定文件是否存在而且是一个尺寸大于0的常规的文件.  !表示匹配条件的反转。
所以 rewritecond 这句就表示当请求链接不存在时 执行下面的 rewriterule 规则。
所以当请求的news_3.html 不存在时会重写地址让 getnews.php?id=3 来处理(否则如果news_3.html 存在则直接就加载该html文件)。
getnews.php ===================>功能:判断参数传输的完整性,并调用相应文件生成html文件。
复制代码 代码如下:
newsdetail.php ====================> 从数据库中读取数据,产生新闻内容,内容被getnews.php捕获
复制代码 代码如下:
这样将会在/test/html 目录下产生以 news_文章id.html 命名的html文件。
ps: 一开始在判断是否存在相应html页面时采用的是 php 内置的 file_exists() 判断,而不用apache的 rewritecond,也即没有 rewritecond %{request_filename}  !-s。看似可行,但结果会产生“循环重定向”的问题。 
       当news_3.html 不存在时 我们需要用 getnews.php生成news_3.html ,生成完毕后需要转向到 news_3.html ,于是又形成了一次请求mod_rewrite又启动把 news_3.html重写为 getnews.php?id=3 这就形成了死循环了。所以把文件存在性的判断交给 rewritecond ,指定的html文件不存在时才启用重写规则。这样循环重定向的问题就没有了。 
       一开始没有采用fopen打开newsdetail.php,然后再将生成的内容fwrite成html文件,然后include输出静态页面。后来在fhjr999的提醒下,改为:将newdetail.php包含进getnews.php,通过ob系列函数将生成的内容放入缓冲,然后再生成html文件。ob的效率是前者的20倍左右。
http://www.bkjia.com/phpjc/318838.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/318838.htmltecharticle一、用到的相关技术关键词:php,apache, mod_rewrite(rewritecond,rewriterule)地址重写, ob系列函数缓冲 file_put_contents生成html 二、流程:用户发...
其它类似信息

推荐信息