我们传统的动态网站(PHP)做法是:将美工各页面文件的后缀.html改为.php,然后再插入php标签和php代码。

提升一点的话,就程序与页面分类,原来页面有多少个html,就建对应的php文件,或者直接用相同的名字,扩展名是.php,然后再include或者用模板引擎显示页面。

都没关系,我要说的不是这方法。
例如说,一个网站,首页是index.php,关于我们是about.php,还有其它,这些页面都需要一些公共的东西,例如数据库的配置文件,我们的做法都会是将这些公共的东西放在一个或多个文件中,需要用到的就include它们。

就拿数据库配置文件来说,例如文件名是inc/db.php,现在的网站基本上都是动态网站,都需要连接数据库读取数据的了,所以index.php和about.php都得incldue “inc/db.php”,好到这里也什么问题。

假如以后添加一个新闻列表页news_list.php,就要把incldue语句拷贝,粘贴。

再添加多一个新闻内容页,拷贝,粘贴。

再添加多一个A页,拷贝,粘贴。

再添加一个B页,拷贝,粘贴。再…… 停停停。

以后我们要用到一个缓存类,就得在原来所有文件里再添加一句include “inc/cache.php”,累不累?不累,可以批量替换嘛。但这也是非常笨的办法。

以上说的缺点,用”唯一入口方式”就可以解决。怎么个唯一入口方式?
在刚才说的基础上,把站点根目录下所有.php都放到app目录去,在根目录下建一个index.php,这个就是唯一入口,站点根目录下就这一个php(后台管理先不说)。

把刚才放到app目录下的.php文件里的include给全部去了,在根目录下的index.php里放一次就行了。
那么要显示首页呢?在唯一入口里include “app/index.php”
要显示关于我们呢?在唯一入口里include “app/about.php”
要……?在唯一入口里…..
……………….停停停,一个文件怎么可以同时include这么多页呢?怎么区分当前是要哪页?
问得太好了。我们可以在url上加一个参数,区分当前请求是要哪一页,例如首页index.php?act=index,关于我们index.php?act=about …….A页index.php?act=A  等等
访问首页还要加,万一用户不加呢?太简单了,不加就默认是index不就行了。
$act = isset($_GET['act']) ? trim($_GET['act']) : ‘index’;
include ‘app/’ . $act . ‘.php’;
唯一入口还有很多好处的。例如说,安全性强了。咱个强法?http://域名/about.php打不开了。

全部页面的请求都要经过唯一入口/index.php,只要在唯一入口里做好安全检测,就好了,做页面加页面,都不需要忧虑什么了。
有人问:唯一入口是做好了安全检测,万一人家直接访问http://域名/app/about.php呢?
问得好,这样解决:除了唯一入口,其他所有文件都在最开始加一句header(“HTTP/1.0 404 Not Found”)
别惊讶,是这么加
if(!defined (“ENTRY”)){
header(“HTTP/1.0 404 Not Found”)
}
这样直接访问就会得到404错误了。好像唯一入口方式访问也会404是吧?有的朋友知道了,我们在唯一入口里定义一个常量ENTRY就行了。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部