php 特有,PHP单一入口的特有作用

在说单一入口之前,先说说多入口。Discuz!, PHPCMS 2008, DedeCMS 都是采用多入口的结构。

多入口,即通过访问不同的 php 文件运行对应的功能。如:

/index.php - 网站首页

/show.php?id=1 - 内容页

/list.php?page=2 - 列表页

/login.php - 用户登录页

……

多入口都是通过包含头文件统一运行环境,即初始化系统。如:

/include/common.inc.php - 头文件,PHP 文件 include 它后便完成了初始化工作,例如可以使用系统的基础函数。

php /index.php

include './include/common.inc.php' // 包含头文件,基本是每个入口 php 文件的首行代码。

……

?>

拿 PHPCMS 2008 的头文件来举例, PHPCMS 2008 在头文件中完成了基础函数的加载,常量的定义,系统配置的载入,POST,GET 数据的过滤,数据库类的实例化,保持用户登录等等等等一系列操作。

反正就是个 php 文件嘛,想做什么直接往里加就是了。

所以,所谓的安全检查,统一检查,权限控制等,用头文件同样可以实现,所谓“单一入口”只不过是换了一种形式,并无实质性的变化。

以前我就是这样认为的。

现在,假设用 CMS 为客户建一个站( CMS 是多入口的):建栏目,配网站,卡拉卡拉一段忙碌后,网站可以上线了,放在这个地址下:

localhost/gz/

没错,这次建的是 gz 这个地区的地区站,客户认为网站做得不错,希望做多一个 bj 地区的地区站。 bj 站的栏目结构,内容,功能模块等都与 gz 站有所不同。

好,现在问题来了,上面提到的三个多入口的系统,都设计成一套程序一个环境,即一套程序只对应一个数据库。对于上面的需求( bj 站),除非修改整套程序的结构(这是不切实际的),否则就只能复制多一份源代码,指向另一个数据库。

于是,我便复制多一份源代码,指向 bj 数据库( gz 站则指向 gz 数据库),建栏目,配网站,卡拉卡拉一优忙碌后,网站又可以上线了,放在这个地址下:

localhost/bj/

所以,现在有两套一样的程序在运行。

然后,客户想改一改 gz 站的功能,于是我修改了 gz 的代码。然后,客户想改一改 bj 站的功能,于是我修改了 bj 的代码。然后,客户想在 bj 站上做与 gz 同样的修改,于是我得把 gz 的修改复制到 bj 中,然后……

于是,我不得不维护两份实际上是“一样”的代码。

假如网站运营得不错,客户又建了若干个地区站,我维护的便是若干份“一样”的代码——这根本就是恶梦。

现在到单一入口登场了。

单一入口,就是访问同一个文件加不同参数运行不同的功能。如:

/index.php - 单一入口,默认显示首页

/index.php?action=show&id=1 - 用 action 参数指明显示内容页

/index.php?action=list&page=2 - 显示列表页

/index.php?action=login - 用户登录页

……

index.php 这个入口做的便是头文件做的初始化操作(外加一些调度),包括加载网站的配置。

现在我们来假设建站用的 CMS 是单一入口的设计,在完成 gz 站后,面对同样的需求( bj 站),我只需要在 /bj/ 目录入多建一个入口文件,加载指向 bj 数据库的配置,再配配数据卡拉卡拉什么的,就完事了!

于是,我只需要维护一份源代码。

这便是单一入口特有的作用——构造环境。

使用哪个数据库就是环境的一种,类似的还有:用内存缓存还是文件缓存,用 mysql 还是 mssql 等。

除非在设计阶段特别留意,否则,头文件的结构都会被写成“一套程序一个环境”的结构。而采用单一入口结构,无论是否留意,都可以轻易实现“一套程序多个环境”。这才是使用单一入口的真正理由。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/405870.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我的新发现:AVL树旋转的一个特性

关于AVL树旋转的代码网络上铺天盖地。 一些经典的实现方法如下: AVLTree SingleLeftRotation(AVLTree A) {AVLTree B A->left;A->Left B->Right;B->Right A;A->Height Max(GetHeight(A->Left), GetHeight(A->Right)) 1;B->Height Max…

VC中设置头文件的搜索路径~~

From:http://hi.baidu.com/woaimuxiaoyizhong/blog/item/cc3d260a9b75f21795ca6b2a.html 近日,小弟在研究UCOS VC版的时候,发现它的头文件并没有在当前目录下,却可以精确的找到。我估计一定是:VC编辑器早设置好了,早已…

真是的= =还是对linux不太了解啊

最近很无聊.....得到了3天假期~~~ 于是乎把Ubuntu10.10下载下来安装了 结果第二天root用户就登陆不上了 进入单用户模式后读shower文件发现密码那就一"!" 真是奇怪.... 之前在网上查说passwd命令没加载... 结果明明加载了 改了之后终于用上root权限了 结果又是惨…

php form validator 下单,PHP Form表单验证:PHP form validator使_php

在php网站开发建设中,用户注册、留言是必不可少的功能,用户提交的信息数据都是通过Form表单提交,为了保证数据的完整性、安全性,PHP Form表单验证是过滤数据的首要环节,PHP对表单提交数据的验证方式多种多样&#xff0…

云服务器,价格其实不便宜,但为什么还要用呢

2012年的时候,接触到云服务器,一心想搞个个人网站。当时,云服务器最低配置,1个月55元,1M带宽、1核CPU、512M内存,独立IP。加上,一些优惠,代金券之内的,1年400元左右。自认…

React开发(189):ant design textarea允许清除allowClear

<div style{{ margin: 10px 0 }}><span style{{ marginRight: 50px }}>调整原因</span><span><TextAreastyle{{ width: 55% }}placeholder"请输入调整原因"value{balancchangereason}formatter{(value) > &#xffe5; ${value}.repla…

DOS管道与重定向

From:http://hi.baidu.com/liouxueyun/blog/item/6951d9611ab9b76a0d33fa60.html 一、 重定向&#xff1a; 所谓重定向&#xff0c;就是不使用系统的标准输入端口、标准输出端口或标准错误端口&#xff0c;而进行重新的指定&#xff0c;所以重定向分为输出重定向、输入重定…

js 调用服务器端方法总结

javascript函数中执行C#代码中的函数&#xff1a; 方法一&#xff1a;1、首先建立一个按钮&#xff0c;在后台将调用或处理的内容写入button_click中; 2、在前台写一个js函数&#xff0c;内容为document.getElementById("btn1").click(); 3、在前台或…

[C语言 - 12] Union联合

union Student{int age;char *name;} stu;union只按照最长的数据成员分配控件&#xff0c;适用于有N个数据不会同时出现的情况&#xff0c;用以压缩空间。转载于:https://www.cnblogs.com/wvqusrtg/p/4501217.html

新闻数据采集php,PHP新闻采集在线源码

PHP新闻采集在线源码可以高效采集新闻网站内容&#xff0c;由于它是一种可以在服务器端执行的嵌入HTML文档的脚本语言&#xff0c;所以它支持在UNIX、LINUX、WINDOWS等系统下运行&#xff0c;而且消耗的系统资源很少。PHP新闻采集在线源码介绍全网采集采集任意互联网公开数据Aj…

[Objective-c 基础 - 1.3] OC带返回值的类方法

1 /*2 计算器类3 1>返回π4 2>计算两个整数的平方5 3>计算两个整数的和6 */7 8 9 #import <Foundation/Foundation.h> 10 11 interface Calculator: NSObject 12 //方法名:pi 13 - (double) pi; 14 15 //OC方法中&#xff0c;一个参数对应一个冒号: 16 /…

UCGUI的模拟器UCGUISim详解

From: http://www.cnblogs.com/shellstudio/articles/ucgui.html 本文转自www.ucgui.com感谢原作者(最近发现该网站已经撤销,不知道作者近况如何.想当初,他对我理解ucgui提供了很多支持和帮助呢!)。 联系方式: ucgui.comgmail.com 一、问题的由来-----模拟器完成了什么 在官方发…

php 最后几个字符,php怎么去掉最后三个字符

在php中&#xff0c;可以利用substr()函数来去掉字符串最后三个字符&#xff0c;该函数可以返回字符串的一部分&#xff1b;具体语法格式为“substr(指定字符串,0,-3)”。本教程操作环境&#xff1a;windows7系统、PHP7.1版&#xff0c;DELL G3电脑php去掉字符串最后三个字符he…

透过北京通信展看国产手机的崛起

透过北京通信展看国产手机的崛起<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />小刀马北京国际通信展已经落下了帷幕&#xff0c;多少繁花似锦都已归尘土&#xff0c;本届通信展到底给我们留下了什么印象什么回忆&#xff1f;大…

Spark(四) -- Spark工作机制

一、应用执行机制 一个应用的生命周期即&#xff0c;用户提交自定义的作业之后&#xff0c;Spark框架进行处理的一系列过程。 在这个过程中&#xff0c;不同的时间段里&#xff0c;应用会被拆分为不同的形态来执行。 1、应用执行过程中的基本组件和形态 Driver&#xff1a; 运…

Linux下查看文件和文件夹大小的df和du命令

From: http://www.yayu.org/look.php?id162 当磁盘大小超过标准时会有报警提示&#xff0c;这时如果掌握df和du命令是非常明智的选择。 df可以查看一级文件夹大小、使用比例、档案系统及其挂入点&#xff0c;但对文件却无能为力。 du可以查看文件及文件夹的大小。 两者配…

php打开就执行url,php执行URL解析

方法一&#xff1a;$url"http://www.baidu.com";file_get_contents($url);方法二&#xff1a;// CURL 方法$url"http://www.baidu.com";$ch curl_init( );curl_setopt( $ch,CURLOPT_URL,$url );curl_setopt( $ch,CURLOPT_HEADER,0 );curl_setopt( $ch,CUR…

java的classpath

转自&#xff1a;http://takkymj.javaeye.com/blog/734408 1、class搜索路径的重要性 理解class搜索路径对所有Java开发人员来说都很重要&#xff0c;但是&#xff0c;IDE的广泛使用掩盖了这项技术&#xff0c;使大家普遍对它缺乏了解&#xff0c;甚至包括好多老鸟。这个问题在…

深入react技术栈(12):组件内通信

我是歌谣 放弃很容易 但是坚持一定很酷 微信公众号关注前端小歌谣获取前后端知识 父组件向子组件传值 子组件向父组件传值 跨级组件通信 没有嵌套关系的组件通信 文章参考深入React技术栈