03年的时候就看过一本php的书,那时还是php3,回首四年php的在web开的的前景真还是一片光明啊!三年不见的php在去看已到了php5了,现在算起我真正从写第一个php的WEB开始距今还是有三四个月了,用工作之余正在进行www.kuomart.com网站的写做,回想当初一直用的是Windows2003+IIS6+PHP5.0.7+MYSQL4.1在进行开发,直到昨天机子重了木马,Kav也没查出个所以然,自己找也没有发现什么可疑暴露点,所以干脆重装了一下xp,由于TV1000电视卡只能在xp进才能正常运行,在2003系统下以前配置成功过一次,但是老实出现硬件出错蓝屏!所以干脆把2003下的我的开发环境的web开发部分也在xp下安装一部分。很想安装一下lamp环境,但考虑到机子上数据太多,操作起来麻烦,等有钱了再买个硬盘或都那天心血来潮再说吧。于是今天中午就开始配置环境!
到http://www.apache.org下载了apache最新版本apache.2.24,安装后怎么也没找到服务,原来我选择了only第二项,选择这项需要手动添加windows服务!baidu了一下才搞明白,所以如果你是第一次安装就一直下一步不要进地设什么不必要的设置,运行一定会ok!
接下来就是安装php了,我开始安装了php5.0.4,4,安装php我就不多说了,下面会把我找到的资料贴出来。然后就是对apache支持php的配置,当然是修改httpd.conf了,可是我
用记事本打开C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf这个文件进行修改:
①找到:
AddType application/x-gzip .gz .tgz
在下面添加以下几行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
AddType image/x-icon .ico
②找到:
#LoadModule ssl_module modules/mod_ssl.so
在下面添加一行:
LoadModule php5_module C:\php5\php5apache2_2.dll
(特别提示:如果你的Apache版本为1.x的,此处应为:LoadModule php5_module C:\php5\php5apache.dll;如果你的Apache版本为2.0.x-2.2.x的,此处应为:LoadModule php5_module C:\php5\php5apache2.dll,我在此处费了好大周折才发现这点!)
③找到:
DirectoryIndex index.php…
这行,可以这样修改,添加默认的文件名:
DirectoryIndex index.php default.php index.htm index.html default.htm default.html
怎么出不正确加上LoadModule php5_module C:\php5\php5apache2_2.dll这句就出现
requested 错误
当然这种情况通常就是baidu或者google一下,原来是各种版本间的问题,我想应该是的,找到对应配置资料如下:
一.下载最新的Apache2.24,MySQL5.2,PHP5.2.1[下载地址:http://cn.php.net/downloads.php 注意:同时下载php-5.2.1-Win32和pecl-5.2.1-Win32(扩展包),格式是解压缩的那种,而不是exe或者msi等直接安装的那种。](具体地址请用baidu自行搜索)。
二.安装配置PHP5.2.1
1.解压缩PHP5.2.1压缩包到C:\PHP5(这个路径和文件名都可以随意,不过以下要是用到这个路径和文件名,如果你用的不是该路径和文件名,请做相应的修改)。
2.复制C:\PHP5目录下的以下文件到windows的系统文件夹里,文件夹视Windows版本的不同而不同(如果是Windows9x/ME,则为c:\windows\syste;如果是Windows NT/2000,则为c:\winnt\system32;如果是Windows XP/server2003,则为c:\windows\system32。其中C:\为你现在所使用的操作系统的系统盘,如果你目前操作系统不是安装在C:\windows下,请相应做出修改)
php5ts.dll
fdftk.dll
fribidi.dll
gds32.dll
libeay32.dll
libmcrypt.dll
libmhash.dll
libmysql.dll
libswish-e.dll
msql.dll
ntwdblib.dll
ssleay32.dll
yaz.dll
3.把C:\PHP5目录下的文件php.ini-dist改名为php.ini(该配置文件自动给所有添加内容加上“//”,增加安全,同时也增加了麻烦;如果把php.ini-recommended改名为php.ini,该配置文件不给所添加内容加上“//”,减少了安全,但更加便利。选择哪个由你决定),复制php.ini到C:\windows\(XP/2003/9x/Me)或C:\Winnt\(2000/nt)下,用记事本打开,做如下几项修改:
①搜索extension_dir= ./这行,并将其路径指到你的PHP目录下的extensions目录,修改为:extension_dir = C:\PHP5\ext
②如若想支持更多模块,请接下面去做,如果不想的话,直接保存php.ini文件即可。
PHP所支持模块很多,不过有些dll不是免费的,所以没有随PHP的压缩包一起发布,不过dlls文件夹里带的就非常多了,刚才我们已经把它们复制到system32文件夹下了,现在我们测试看它支持多少模块。以下是我测试的结果,仅供参考,如果安装完毕后,弹出不支持xxx.dll模块的话,直接将前面分号加上去就可以了。搜索:
;Windows Extensions
;Note that MySQL and ODBC support is now built in, so no dll is needed for it.
下面都用分号在前面注释掉了支持的扩展模块,如果你想PHP支持某个模块,请将前面的“;”去掉即可,下面是我测试后的结果,一般按照下面那样去掉注释后没什么问题的:
extension=php_bz2.dll
extension=php_cpdf.dll
extension=php_crack.dll
extension=php_curl.dll
extension=php_db.dll
extension=php_dba.dll
extension=php_dbase.dll
extension=php_dbx.dll
extension=php_domxml.dll
extension=php_exif.dll
extension=php_fdf.dll
extension=php_filepro.dll
extension=php_gd2.dll
extension=php_gettext.dll
extension=php_hyperwave.dll
extension=php_iconv.dll
;extension=php_ifx.dll
;extension=php_iisfunc.dll
extension=php_imap.dll
extension=php_interbase.dll
extension=php_java.dll
extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_mcrypt.dll
extension=php_mhash.dll
extension=php_mime_magic.dll
extension=php_ming.dll
extension=php_mssql.dll
extension=php_msql.dll
;extension=php_oci8.dll
extension=php_openssl.dll
;extension=php_oracle.dll
extension=php_pdf.dll
extension=php_pgsql.dll
;extension=php_printer.dll
extension=php_shmop.dll
extension=php_snmp.dll
extension=php_sockets.dll
;extension=php_sybase_ct.dll
extension=php_w32api.dll
extension=php_xmlrpc.dll
extension=php_xslt.dll
extension=php_yaz.dll
extension=php_zip.dll
修改完成后,保存php.ini。
③解压缩pecl-5.2.1-Win32.rar包,将其中的所有文件复制到C:\PHP5\ext文件夹下。(该文件夹是PHP5.2.1的扩展文件存放之处,如果你用c语言编了PHP的扩展程序,也可以放到该文件夹下)
④在C:\PHP5目录下新建一个文件夹,命名为:session。(该文件夹是用来保存session的,因为PHP没有类似ASP中的application那样的长驻内存的变量,所以对于保存初始查询条件以备翻页之用,或者做购物车的来说,session几乎是唯一可选的。不过该文件夹以后需要定期清理)
到此完成PHP的安装和配置。
三.Mysql的安装
Mysql相对来说是比较独立的,这个数据库很小,不能直接对它进行操作,不像access或者SQL2000那样有图形化的管理工具,不过目前已经有很多图形化管理软件可以很好地操作它,比如:EMS SQL Manager 2005 for MySQL(强烈推荐 最优秀的MySQL管理软件),Navicat,phpMyAdmin,mysqlcc。这些软件可以到网上下载获得,在此不详细说明。
1.下载获得Mysql的for win32安装包后,用winzip打开,直接运行setup.exe,需要注意的是选择一个安装路径,当然,安装路径可以任意,不过建议将它和PHP安装在一起,选择C:\MySQL目录。
2.安装完成后MySQL自动进入设置阶段。按照默认方式进行配置,最后输入密码,完成设置。(默认的用户名是root,密码为空)
3.一般装完MySQL后会自动启动服务,如果没有启动的话,请双击C:\MySQL\bin\mysqld-nt.exe运行即可。
4.如果你已经下载了上面提到的几个管理软件,就可用它们进行MySQL的管理了。
四.IIS的配置(与第五任选一项)
打开IIS,在“默认Web站点”上右键打开属性,在主目录里做如下图中的设置,注意步骤:
完成后IIS+PHP+MySQL的环境算是建立了。
五.Apache的安装配置(与第四任选一项)
如果你没有安装IIS,那么请装Apache这个小巧而强大的Web服务器,安装目录建议和PHP的目录一致,选择C:\。系统默认安装目录是C:\Program Files:
1.下载Apache2.2.4 for win32.Msi安装文件,直接双击它后就会自动执行Apache的安装了。
2.安装过程中,按照提示,从上到下第一个空行输入localhost,其余的两个空行分别输入你的名字和邮件地址(随便输入什么都行),完成安装配置。
安装完后会在桌面右下角系统托盘里显示apache的图标,双击可以打开Apache的控制面板,可以停止或者重起服务器。
3.Apache2.2.4的配置
用记事本打开C:\Program Files\Apache Software Foundation\Apache2.2\conf\httpd.conf这个文件进行修改:
①找到:
AddType application/x-gzip .gz .tgz
在下面添加以下几行:
AddType application/x-httpd-php .php
AddType application/x-httpd-php .php4
AddType application/x-httpd-php .php3
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps
AddType image/x-icon .ico
②找到:
#LoadModule ssl_module modules/mod_ssl.so
在下面添加一行:
LoadModule php5_module C:\php5\php5apache2_2.dll
(特别提示:如果你的Apache版本为1.x的,此处应为:LoadModule php5_module C:\php5\php5apache.dll;如果你的Apache版本为2.0.x-2.2.x的,此处应为:LoadModule php5_module C:\php5\php5apache2.dll,我在此处费了好大周折才发现这点!)
③找到:
DirectoryIndex index.php…
这行,可以这样修改,添加默认的文件名:
DirectoryIndex index.php default.php index.htm index.html default.htm default.html
保存文件,重起apache服务器。到此PHP的环境已经完全建立了。
六.Zend Optimizer安装配置(可选)
下载来后是一个.exe的文件,直接安装就可以了,安装过程要你选择PHP版本,一定要选择准确,这里我选择php5.2.1,完成安装之前提示是否备份php.ini,点确定后就结束安装了。
打开php.ini,修改一个地方:
找到:
[Zend]
在下面可以看到:
zend_optimizer.optimization_level=*
这行,将“=”后面数值改为1023,也就是将这行改为:
zend_optimizer.optimization_level=1023
保存后重起Apache/IIS,到此安装全部结束。
七.测试
用记事本新建个文件,写如下几行:
phpinfo();
?>
将文件改名为phpinfo.php,保存到C:\Apache Software Foundation\Apache2.2\htdocs目录下(该目录是你的站点根目录),然后在浏览器中输入http://localhost/phpinfo.php。
如果你可以看到相关的PHP信息,那就证明整个Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1环境的安装配置工作胜利完成!
记得第一次面试phper(php是对我来说可以快速上手的另一web开发语言),人家问我MVC,我只知道m就是model,v就是view,c就是Controller,具体把其它的认识我是一无所知,结果我被问得一问三不知!!我才知道自己多么的差劲。于是我决定不把它搞清楚不罢休!找到如下资料
2006-12-17 12:02:37
大中小
模型-视图-控制器(MVC)是Xerox PARC在八十年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已被广泛使用。最近几年被推荐为Sun公司J2EE平台的设计模式,并且受到越来越多的使用 ColdFusion 和 PHP 的开发者的欢迎。模型-视图-控制器模式是一个有用的工具箱,它有很多好处,但也有一些缺点。
MVC如何工作
MVC是一个设计模式,它强制性的使应用程序的输入、处理和输出分开。使用MVC应用程序被分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。
视图
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,它们包括Macromedia Flash和象XHTML,XML/XSL,WML等一些标识语言和Web services.
如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,不管这些数据是联机存储的还是一个雇员列表,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。
模型
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如它可能用象EJBs和ColdFusion Components这样的构件对象来处理数据库。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
控制器
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。
现在我们总结MVC的处理过程,首先控制器接收用户的请求,并决定应该调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,最后控制器用相应的视图格式化模型返回的数据,并通过表示层呈现给用户。
为什么要使用 MVC
大部分Web应用程序都是用像ASP,PHP,或者CFML这样的过程化语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。经验比较丰富的开发者会将数据从表示层分离开来,但这通常不是很容易做到的,它需要精心的计划和不断的尝试。MVC从根本上强制性的将它们分开。尽管构造MVC应用程序需要一些额外的工作,但是它给我们带来的好处是无庸质疑的。
首先,最重要的一点是多个视图能共享一个模型,正如我所提及的,现在需要用越来越多的方式来访问你的应用程序。对此,其中一个解决之道是使用MVC,无论你的用户想要Flash界面或是 WAP 界面;用一个模型就能处理它们。由于你已经将数据和业务规则从表示层分开,所以你可以最大化的重用你的代码了。
由于模型返回的数据没有进行格式化,所以同样的构件能被不同界面使用。例如,很多数据可能用HTML来表示,但是它们也有可能要用Macromedia Flash和WAP来表示。模型也有状态管理和数据持久性处理的功能,例如,基于会话的购物车和电子商务过程也能被Flash网站或者无线联网的应用程序所重用。
因为模型是自包含的,并且与控制器和视图相分离,所以很容易改变你的应用程序的数据层和业务规则。如果你想把你的数据库从MySQL移植到Oracle,或者改变你的基于RDBMS数据源到LDAP,只需改变你的模型即可。一旦你正确的实现了模型,不管你的数据来自数据库或是LDAP服务器,视图将会正确的显示它们。由于运用MVC的应用程序的三个部件是相互对立,改变其中一个不会影响其它两个,所以依据这种设计思想你能构造良好的松偶合的构件。
对我来说,控制器的也提供了一个好处,就是可以使用控制器来联接不同的模型和视图去完成用户的需求,这样控制器可以为构造应用程序提供强有力的手段。给定一些可重用的模型和视图,控制器可以根据用户的需求选择模型进行处理,然后选择视图将处理结果显示给用户。
MVC的缺点
MVC的缺点是由于它没有明确的定义,所以完全理解MVC并不是很容易。使用MVC需要精心的计划,由于它的内部原理比较复杂,所以需要花费一些时间去思考。
你将不得不花费相当可观的时间去考虑如何将MVC运用到你的应用程序,同时由于模型和视图要严格的分离,这样也给调试应用程序到来了一定的困难。每个构件在使用之前都需要经过彻底的测试。一旦你的构件经过了测试,你就可以毫无顾忌的重用它们了。
根据我个人经验,由于我们将一个应用程序分成了三个部件,所以使用MVC同时也意味着你将要管理比以前更多的文件,这一点是显而易见的。这样好像我们的工作量增加了,但是请记住这比起它所能带给我们的好处是不值一提。
MVC并不适合小型甚至中等规模的应用程序,花费大量时间将MVC应用到规模并不是很大的应用程序通常会得不偿失。
MVC是一条创建软件的好途径
MVC设计模式是一个很好创建软件的途径,它所提倡的一些原则,像内容和显示互相分离可能比较好理解。但是如果你要隔离模型、视图和控制器的构件,你可能需要重新思考你的应用程序,尤其是应用程序的构架方面。如果你肯接受MVC,并且有能力应付它所带来的额外的工作和复杂性,MVC将会使你的软件在健壮性,代码重用和结构方面上一个新的台阶。
Java开发Web Application有几种符合MVC设计模式的开发方式。
1:Jsp+Servlet+JavaBean(EJB)
2:Jsp+JavaBean(Controller)+JavaBean(EJB)(Model)
3:TDK(Turbine,Velocity...)
4:Xsp
5:Jsp+Struts+JavaBean(EJB)
首先我来举个例子:
一个简单的文章显示系统
简单期间,我们假定这个文章系统是只读的,也就是说这个例子将不涉及文章的发布,现在开始了。
由于只涉及数据库的读取,所以我定义了两个interface
Interface DataOperation
{
public function select($info);
public function selectNum($info);
}
上面这interface定义了读取数据的接口,select方法将返回所需要的文章。selectNum方法返回文章的总数,这是分页显示时用到的。$info是一个数组,用来存放查询条件
Interface DataSource
{
public static function getInstance();
}
这里我们假定我们操作的是数据库,DataSource定义一个接口,所有实现该接口的实例类将得到一个静态对象
Interface Controller
{
public function pop();
public function push();
public function execute();
}
Interface View
{
public function display();
}
好了,我们来实现.
下面定义一个类来实现DataSource接口,这个类运用了单例模式
class DataBaseSource implements DataSource
{
public static $instance = null;
public static function getInstance()
{
if(self::$instance == null)
{
self::$instance == new PDO("mysql:host=localhost;dbname=article","root","123456");
}
return self::$instance;
}
}
定义一个抽象类来实现DataOperation,我们要共享一个数据库连接,所以我在抽象类中将这个数据库对象初始化,这样,所有的子类都能共享这个对象
abstract class DataBaseOperation implements DataOperation
{
protected $db = null;
public function __construct()
{
$this->db = DataBaseSource::getInstance();
}
public function select($info);
}
下面我来写一个业务子类来实现抽象类DataBaseOperation
class Tech extends DataBaseOperation
{
public function select($info)
{
//在这里实现你的代码
}
public function selectNum($info)
{
//在这里实现你的代码
}
}
业务逻辑层我们实现了,下面是控制层
class ViewController implements Controller
{
private $mod = array();
public function push($key,$value);
{
//实现你的代码,将类注册进$this->mod;
}
public function pop($key)
{
//实现你的代码,将$this->mod[$key]值为null;
}
public function execute($key)
{
//在这里实现你的代码,生成实例.注意利用php5新的特性,异常的处理
}
}
好了,下面是表现层,这里将实现Interface View
abstract ArticleView implements View
{
protected $smarty = null;
public function __construct()
{
$this->smarty = new Smarty();
///下面你可以定义smarty的一些属性值
}
}
具体的页面,例如科技文章的显示页面
class TechArticleView extends ArticleView
{
public function display()
{
//实现你的代码,调用Tech类和更多的DataBaseOperation子类
}
}
好了,下面是总入口 index.php
try
{
$viewController = new ViewController();
$viewController->push("tech",TechArticleView);
//持续的增加
$mod = $_GET["mod"]:$_GET["mod"]:$_POST["mod"];
//最后
$viewController->execute($key);
}
catch(Exception $e)
{
//如何处理异常就是你的事了
}