以前用c#现在想学习PHP,想做一个全站缓存功能。将所有需内的内容缓存成静态文件。
以前用C#是这样实现的。
在访问网站所有内容之前使用httpModules拦截访问路径。再根据访问路径从缓存目录中读出或重定向到缓存目录。如果缓存中不存在或过期。就执行原文件,再拦截输出流.Flush,将其写入缓存目录。现在想用PHP写个一样的功能。但不知道PHP有没有和httpModules相似的功能,就是有多个事件触发,比如在执行所有程序之前触发和在生成完结果之后输出到客户端之前触发。不要求说的太细,只要告给我学习方向就行了。
以前用C#是这样实现的。
在访问网站所有内容之前使用httpModules拦截访问路径。再根据访问路径从缓存目录中读出或重定向到缓存目录。如果缓存中不存在或过期。就执行原文件,再拦截输出流.Flush,将其写入缓存目录。现在想用PHP写个一样的功能。但不知道PHP有没有和httpModules相似的功能,就是有多个事件触发,比如在执行所有程序之前触发和在生成完结果之后输出到客户端之前触发。不要求说的太细,只要告给我学习方向就行了。
但不知道怎么用。会在其它文件执行前执行它吗?
最开始判断缓存是否过期,如果不过期则输出缓存,
如果过期:
开始 ob_start()
最后 ob_get_flush() 得到输入的内容写缓存。
输出缓存。
ob_get_flush()得到的是字符串(HTML内容)至于html缓存内容写到什么地方,起什么样的文件名,你自己定。
PHP要做的是就比较缓存文件的日期。如果过期了就重新生成并显示缓存内容,
如果你不想生成新的缓存,直接 print(ob_get_flush());或 ob_end_flush()就输出到浏览器了。原来缓存的内容还是旧的,不过就失去了缓存的意义。
这要看主程序中 include("*.php")或require("*.php")的顺序了。
再或者某文件明明存在,但我让他显示404错误。还有就是在全局范围内加入防CC代码。这些在.NET中都可以在IIS执行程序之前或之后完成。
用apache 的重定向实现。
httpd.conf中
ErrorDocument 404 /missing.html 在 missing.html 定义你要指定的信息。改成php可以动态定义。如果有那个文件(静态文件)。只能用重定向规则了。
php.ini里有auto_prepend_file / auto_append_file 可以用