php连接mssql两种方法_第1页
php连接mssql两种方法_第2页
php连接mssql两种方法_第3页
php连接mssql两种方法_第4页
php连接mssql两种方法_第5页
已阅读5页,还剩75页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP连接MSSQL两种方法(COMPDO)分类MSSQL类PHP2009111311311309人阅读评论0收藏举报PHPEXTENSION服务器数据库扩展QUERY一、使用COM1、首先是准备工作在WINDOWS下通过PHP访问MSSQLSERVER2000,可以有两种方式,1利用COM2一种是使用MSSQL_系列函数要使用这两种都需要在PHPINI进行设定1允许DCOM,需要将PHPINI中的COMALLOW_DCOMTRUE前的分号“去掉。2使用MSSQL扩展,需要PHPINI中的EXTENSIONPHP_MSSQLDLL前的分号“去掉。3确认EXTENSION_DIR为正确路径,以本机为例EXTENSION_DIR“C/APPSERV/PHP5/EXT“。4如果仍然机器报错说找不到C/APPSERV/PHP5/EXT/PHP_MSSQLDLL但明明存在这个文件。解决方法将PHP_MSSQLDLL,NTWDBLIBDLL拷贝到系统目录/SYSTEM32下重启测试。注上面两个DLL文件不在相同目录下,我的为C/APPSERV/PHP5/EXT/PHP_MSSQLDLL;C/APPSERV/PHP5/NTWDBLIBDLL另外设置好了后记得重启服务器哦。我的PHP环境是用APPSERV搭建的,我这样做了后,访问MSSQLSERVER一切正常。若你仍然有问题,请查阅PHP手册PHPINI的设置。2、利用COM访问MSSQLSERVER的简单方法CONNNEWCOM“ADODBCONNECTION“ORDIE“CANNOTSTARTADO“/首先声明一个连接对象CONNSTR“PROVIDERSQLOLEDBPERSISTSECURITYINFOFALSEUSERIDYOURUIDPASSWORDYOURPWDINITIALCATALOGYOURDATABASEDATASOURCE127001“/设置连接字符串很奇怪DATASOURE为LOCALHOST或服务器名不行总是报错而为LOCAL或127001却行,希望哪个高手帮我说明一下CONNOPENCONNSTR/建立数据库连接SQLSTR“SELECTFROMTEST“/设置查询字符串RSCONNEXECUTESQLSTR/执行查询获得结果或者/RSNEWCOM“ADODBRECORDSET“/声明一个数据集对象/RSOPENSQLSTR,CONN/,3,3/获得数据集RCORDSET内容NUM_COLSRSFIELDSCOUNT/得到数据集列数WHILERSEOF/输出结果ECHORSFIELDSNAMEVALUE“/NAME为字段名,需要明确制定RSMOVENEXT或者/FORI0IVALUE“/T“/ECHO“/N“/RSMOVENEXTRSCLOSECONNCLOSERSNULLCONNNULL3、使用MSSQL_函数访问MSSQLSERVER的简单方法HOSTNAME“YOURHOUSTNAME“USERNAME“YOURUSERNAME“PASSWORD“YOURPASSWORD“CONNMSSQL_CONNECTHOSTNAME,USERNAME,PASSWORDORDIE“DATABASEFAILEDTORESPOND“/建立连接DBNAME“YOURDATABASE“RETMSSQL_SELECT_DBDBNAME/选择数据库SQLSTR“SELECTFROMTEST“/设置查询字符串RESULTMSSQL_QUERYQUERY/执行查询获得结果WHILELINEMSSQL_FETCH_ROWRESULT/输出结果ECHO“LINE0,LINE1“/MSSQL_FETCH_ROW每次返回一个ENUMERATED列举ARRAY,直到没有数据而返回FALSE或者/WHILEROWMSSQL_FETCH_ARRAYRESULT/ECHOROW“NAME“或者/ECHOROW0,ROW1/MSSQL_FETCH_ARRAY每次返回一个数字索引数组或一个相关数组,直到没有数据而返回FALSE/题外关于通过PHP访问MSSQLSERVER的小结就是这些了。希望能对你有所帮助,第一次写又是初学,请你指出,共同进步。求助1、我在设置连接字符串的时候,为什么DATASOURE为LOCALHOST或服务器名不行总是报错而为LOCAL或127001却行,希望哪个高手帮我说明一下2、我在设置查询字符串的时候,如何对“LIKE“单引号内为一个百分号和一个短横线进行转义二、使用PDO1、首先仍然是准备工作1使用PDO扩展,需要将PHPINI中的EXTENSIONPHP_PDODLL前的分号“去掉。2访问MSSQL,需要将PHPINI中的EXTENSIONPHP_PDO_MSSQLDLL前的“去掉没有则添加。补充如果你需要访问MYSQL,需要将PHPINI中的EXTENSIONPHP_PDO_MSSQLDLL前的“去掉。其他数据库请去掉相应扩展前的“。3确认EXTENSION_DIR为正确路径,以本机为例EXTENSION_DIR“C/APPSERV/PHP5/EXT“。4如果仍然机器报错说找不到C/APPSERV/PHP5/EXT/PHP_MSSQLDLL但明明存在这个文件。解决方法将PHP_MSSQLDLL,NTWDBLIBDLL拷贝到系统目录/SYSTEM32下重启测试。注上面两个DLL文件不在相同目录下,我的为C/APPSERV/PHP5/EXT/PHP_MSSQLDLL;C/APPSERV/PHP5/NTWDBLIBDLL另外设置完毕后仍然记得要重启服务器哦2、使用PDO访问MSSQLSERVER的简单方法USERNAMEYOURUSERNAMEPWDYOURPASSWORDTRY/HOST127001可用;LOCAL不可用;LOCALHOST不可用;MAXY不可用DBHNEWPDOMSSQLHOST127001DBNAMEYOURDATABASE,USERNAME,PWD/声明一个PDO对象并指定它的连接字符串SQLSTRI“SELECTFROMUPLOW“/指定查询字符串FOREACHDBHQUERYSQLSTRIASROW/执行查询获得结果,并输出PRINT_RROW或者/ECHOROWNAME/指定字段输出CATCHPDOEXCEPTIONEPRINT“ERROR“EGETMESSAGE“MYSQLEXCEPTION数据库EXTENSIONQUERYPDOPHPDATAOBJECT是PHP5新出来的东西,在PHP6都要出来的时候,PHP6只默认使用PDO来处理数据库,将把所有的数据库扩展移到了PECL,那么默认就是没有了我们喜爱的PHP_MYSQLDLL之类的了,那怎么办捏,我们只有与时俱进了,我就小试了一把PDO。(本文只是入门级的,高手可以略过,呵呵)【PDO是啥】PDO是PHP5新加入的一个重大功能,因为在PHP5以前的PHP4/PHP3都是一堆的数据库扩展来跟各个数据库的连接和处理,什么PHP_MYSQLDLL、PHP_PGSQLDLL、PHP_MSSQLDLL、PHP_SQLITEDLL等等扩展来连接MYSQL、POSTGRESQL、MSSQLSERVER、SQLITE,同样的,我们必须借助ADODB、PEARDB、PHPLIBDB之类的数据库抽象类来帮助我们,无比烦琐和低效,毕竟,PHP代码的效率怎么能够我们直接用C/C写的扩展斜率高捏所以嘛,PDO的出现是必然的,大家要平静学习的心态去接受使用,也许你会发现能够减少你不少功夫哦。【安装PDO】我是在WINDOWSXPSP2上面,所以嘛,整个过程都是在WINDOWS行进行的啦,至于LINUX/FREEBSD等平台,请自行查找资料设置安装。我的是PHP514,已经自带有了PHP_PDODLL的扩展,不过需要稍微设置一下才能使用。打开C/WINDOWS/PHPINI,那是我的PHP配置文件,找到下面这行EXTENSION_DIR这个就是我们扩展存在的目录,我的PHP5扩展是在C/PHP5/EXT,那么我就把这行改成EXTENSION_DIR“C/PHP5/EXT“然后再往PHPINI下面找到DYNAMICEXTENSIONS下面有一堆类似EXTENSIONPHP_MBSTRINGDLL的东西,这里就是PHP扩展加载的配置了,我们再最后面添加上我们PDO的扩展EXTENSIONPHP_PDODLLEXTENSIONPHP_PDO_MYSQLDLLEXTENSIONPHP_PDO_PGSQLDLLEXTENSIONPHP_PDO_SQLITEDLLEXTENSIONPHP_PDO_MSSQLDLLEXTENSIONPHP_PDO_ODBCDLLEXTENSIONPHP_PDO_FIREBIRDDLLEXTENSIONPHP_PDO_OCI8DLL各种PDO的驱动,能给加上的全给加上,不过后面的PHP_PDO_OCI8DLL,因为我没有安装ORALCE数据库,所以没有这个,就使用分号注释掉它。然后重启我们的WEB服务器,IIS/APACHE,我的是IIS,嘿嘿,表鄙视我,在WINDOWS上,简单嘛。重启后,在我们WEB服务器的文档目录下写一个PHPINFOPHP的文件,加上这些PHPINFO然后打开我们可爱的浏览器IE/FIREFOX,我的是FIREFOX20,刚下载的,很爽,不怕流氓软件,哈哈。在浏览器里面输入HTTP/LOCALHOST/PHPINFOPHP,如果你的这个页面路径不一致,请自行输入。输出的内容中,如果你能够顺利的看到PDOPDOSUPPORTENABLEDPDODRIVERSMYSQL,PGSQL,SQLITE,MSSQL,ODBC,FIREBIRD后面有各种驱动的说明PDO_FIREBIRD,PDO_MSSQL,PDO_MYSQL,PDO_ODBC,PDO_PGSQL,PDO_SQLITE那么,恭喜你安装成功了,否则请仔细检查上面的步骤。【牛刀小小试】我用的是MYSQL4026,但是我个人推荐大家使用MYSQL41X或者MYSQL50X,因为那些版本有很多有趣的东西值得去学习。我们这里PDO需要连接的就是我的MYSQL40啦,如果你没有安装MYSQL,请自行安装。我们建立好了MYSQL,并且在TEST库里添加了表FOO,包括ID,NAME,GENDER,TIME等四个字段。我们开始构造第一个PDO应用,建立一个PDOPHP文件在WEB文档目录下PHPDSN“MYSQLHOSTLOCALHOSTDBNAMETEST“DBNEWPDODSN,ROOT,COUNTDBEXEC“INSERTINTOFOOSETNAMEHEIYELUREN,GENDER男,TIMENOW“ECHOCOUNTDBNULL不明白啥意思,俺们来慢慢讲讲。这行DSN“MYSQLHOSTLOCALHOSTDBNAMETEST“就是构造我们的DSN(数据源),看看里面的信息包括数据库类型是MYSQL,主机地址是LOCALHOST,数据库名称是TEST,就这么几个信息。不同数据库的数据源构造方式是不一样的。DBNEWPDODSN,ROOT,初始化一个PDO对象,构造函数的参数第一个就是我们的数据源,第二个是连接数据库服务器的用户,第三个参数是密码。我们不能保证连接成功,后面我们会讲到异常情况,这里我们姑且认为它是连接成功的。COUNTDBEXEC“INSERTINTOFOOSETNAMEHEIYELUREN,GENDER男,TIMENOW“ECHOCOUNT调用我们连接成功的PDO对象来执行一个查询,这个查询是一个插入一条记录的操作,使用PDOEXEC方法会返回一个影响记录的结果,所以我们输出这个结果。最后还是需要结束对象资源DBNULL默认这个不是长连接,如果需要数据库长连接,需要最后加一个参数ARRAYPDOATTR_PERSISTENTTRUE变成这样DBNEWPDODSN,ROOT,ARRAYPDOATTR_PERSISTENTTRUE一次操作就这么简单,也许跟以前的没有太大区别,跟ADODB倒是有几分相似。【继续了解】如果我们想提取数据的话,那么就应该使用数据获取功能。(下面用到的DB都是上面已经连接好的对象)PHPFOREACHDBQUERY“SELECTFROMFOO“PRINT_RROW我们也可以使用这种获取方式PHPRSDBQUERY“SELECTFROMFOO“WHILEROWRSFETCHPRINT_RROW如果想一次把数据都获取到数组里可以这样PHPRSDBQUERY“SELECTFROMFOO“RESULT_ARRRSFETCHALLPRINT_RRESULT_ARRARRAY0ARRAYID101NAMEHEIYELUREN1HEIYELURENGENDER男2男TIME20061028231423320061028231423我们看里面的记录,数字索引和关联索引都有,浪费资源,我们只需要关联索引的PHPDBSETATTRIBUTEPDOATTR_CASE,PDOCASE_UPPERRSDBQUERY“SELECTFROMFOO“RSSETFETCHMODEPDOFETCH_ASSOCRESULT_ARRRSFETCHALLPRINT_RRESULT_ARR看上面的代码,SETATTRIBUTE方法是设置部分属性,主要属性有PDOATTR_CASE、PDOATTR_ERRMODE等等,我们这里需要设置的是PDOATTR_CASE,就是我们使用关联索引获取数据集的时候,关联索引是大写还是小写,有几个选择PDOCASE_LOWER强制列名是小写PDOCASE_NATURAL列名按照原始的方式PDOCASE_UPPER强制列名为大写我们使用SETFETCHMODE方法来设置获取结果集的返回值的类型,同样类型还有PDOFETCH_ASSOC关联数组形式PDOFETCH_NUM数字索引数组形式PDOFETCH_BOTH两者数组形式都有,这是缺省的PDOFETCH_OBJ按照对象的形式,类似于以前的MYSQL_FETCH_OBJECT当然,一般情况下我们是使用PDOFETCH_ASSOC,具体使用什么,按照你自己的需要,其他获取类型参考手册。除了上面这种获取数据的方式,还有这种PHPRSDBPREPARE“SELECTFROMFOO“RSEXECUTEWHILEROWRSFETCHPRINT_RROW其实差不多啦。如果你想获取指定记录里一个字段结果的话,可以使用PDOSTATEMENTFETCHCOLUMNPHPRSDBQUERY“SELECTCOUNTFROMFOO“COLRSFETCHCOLUMNECHOCOL一般使用FETCHCOLUMN来进行COUNT统计或者某些只需要单字段的记录很好操作。简单的总结一下上面的操作查询操作主要是PDOQUERY、PDOEXEC、PDOPREPARE。PDOQUERY主要是用于有记录结果返回的操作,特别是SELECT操作,PDOEXEC主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它返回的结果是当前操作影响的列数。PDOPREPARE主要是预处理操作,需要通过RSEXECUTE来执行预处理里面的SQL语句,这个方法可以绑定参数,功能比较强大,不是本文能够简单说明白的,大家可以参考手册和其他文档。获取结果集操作主要是PDOSTATEMENTFETCHCOLUMN、PDOSTATEMENTFETCH、PDOSTATEMENTFETCHALL。PDOSTATEMENTFETCHCOLUMN是获取结果指定第一条记录的某个字段,缺省是第一个字段。PDOSTATEMENTFETCH是用来获取一条记录,PDOSTATEMENTFETCHALL是获取所有记录集到一个中,获取结果可以通过PDOSTATEMENTSETFETCHMODE来设置需要结果集合的类型。另外有两个周边的操作,一个是PDOLASTINSERTID和PDOSTATEMENTROWCOUNT。PDOLASTINSERTID是返回上次插入操作,主键列类型是自增的最后的自增ID。PDOSTATEMENTROWCOUNT主要是用于PDOQUERY和PDOPREPARE进行DELETE、INSERT、UPDATE操作影响的结果集,对PDOEXEC方法和SELECT操作无效。【错误处理】如果程序中碰到错误咋办我们这里描述PDO类的错误信息和异常处理。1面向对象的方式先看看如果连接错误等的处理,使用面向对象的方式来处理PHPTRYDBNEWPDOMYSQLHOSTLOCALHOSTDBNAMETEST,USER,PASSDBNULLCATCHPDOEXCEPTIONEPRINT“ERROR“EGETMESSAGE“BR/“DIE这里利用我们PHP5面向对象的异常处理特征,如果里面有异常的话就初始化调用PDOEXCEPTION来初始化一个异常类。PDOEXCEPTION异常类的属性结构PHPCLASSPDOEXCEPTIONEXTENDSEXCEPTIONPUBLICERRORINFONULL/错误信息,可以调用PDOERRORINFO或PDOSTATEMENTERRORINFO来访问PROTECTEDMESSAGE/异常信息,可以试用EXCEPTIONGETMESSAGE来访问PROTECTEDCODE/SQL状态错误代码,可以使用EXCEPTIONGETCODE来访问这个异常处理类是集成PHP5内置的异常处理类,我们简单的看一下PHP5内置的异常处理类结构PHPCLASSEXCEPTION/属性PROTECTEDMESSAGEUNKNOWNEXCEPTION/异常信息PROTECTEDCODE0/用户自定义异常代码PROTECTEDFILE/发生异常的文件名PROTECTEDLINE/发生异常的代码行号/方法FINALFUNCTIONGETMESSAGE/返回异常信息FINALFUNCTIONGETCODE/返回异常代码FINALFUNCTIONGETFILE/返回发生异常的文件名FINALFUNCTIONGETLINE/返回发生异常的代码行号FINALFUNCTIONGETTRACE/BACKTRACE数组FINALFUNCTIONGETTRACEASSTRING/已格成化成字符串的GETTRACE信息相应的,在代码中可以合适的调用GETFILE和GETLINE来进行错误定位,更方便的进行调试。2使用面向过程的方法先看代码DBNEWPDOMYSQLHOSTLOCALHOSTDBNAMETEST,USER,PASSRSDBQUERY“SELECTAA,BB,CCFROMFOO“IFDBERRORCODE00000PRINT_RDBERRORINFOEXITARRRSFETCHALLPRINT_RARRDBNULLPDO和PDOSTATEMENT对象有ERRORCODE和ERRORINFO方法,如果没有任何错误,ERRORCODE返回的是00000,否则就会返回一些错误代码。ERRORINFO返回的一个数组,包括PHP定义的错误代码和MYSQL的错误代码和错误信息,数组结构如下ARRAY042S22110542UNKNOWNCOLUMNAAAINFIELDLIST每次执行查询以后,ERRORCODE的结果都是最新的,所以我们可以很容易自己控制错误信息显示。【简单总结】从上面的使用看出,PDO功能确实强大,另外还有一些内容我没有讲到,比如绑定参数、预处理、存储过程、事务处理等等功能。另外还有不同数据扩DSN的构造,ORACLE数据库自己很多特殊的东西,都需要深入去学习理解,这篇文章就只是简单的描述了一些入门知识,算是对PDO一个简单的了解吧。PHP使用ADODB连接MSSQL数据库代码20100913152719我来说两句收藏我要投稿PHP使用ADODB连接MSSQL数据库代码INCLUDE_ONCEADODB5/ADODBINCPHPCONNADONEWCONNECTIONODBC_MSSQLCONNPCONNECT“DRIVERSQLSERVERSERVERDLUTPCSQLEXPRESSDATABASEYUYAN“,ZHOUHAO,950288ADODB_FETCH_MODEADODB_FETCH_ASSOCSQLSTRSELECTFROMYUYANWHEREPS教程NNORSTCONNEXECUTESQLSTR,005ORDIECONNECTERRORWHILERSTEOF/ECHORSTFIELDSPS教程NNAMERSTFIELDSPSNNOECHODAJIAHAORSTMOVENEXTRSTCLOSECONNCLOSE几种常用PHP连接数据库的代码示例200912031334佚名百度博客字号T|T我们今天为大家介绍的PHP连接数据库的方法包括在MYSQL数据库,ACCESS数据库,MSSQL数据库和ORACLE数据库中实现。AD2014WOT全球软件技术峰会北京站课程视频发布PHP语言经常被程序员用来开发网站,在实际操作中肯定会与数据库打上交道。今天我们就为大家介绍有关PHP连接数据库的各种方法,希望对大家有用。解读PHP函数STRREV以外的三种逆序排列PHP自定义异常处理器的几种使用方法如何正确实现PHP网站优化教你如何正确安装PHPDOCUMENTOR如何正确配置PHP开发环境PHP连接数据库之PHP连接MYSQL数据库代码1PHP连接数据库之PHP连接ACCESS数据库代码方法1OPENCONNSTR5RSNEWCOM“ADODBRECORDSET“6RSOPEN“SELECTFROMSZD_T“,CONN,1,17WHILERSEOF8FRSFIELDS19ECHOFVALUE10RSMOVENEXT1112PHP连接数据库之PHP连接MSSQL数据库代码方法1安装SQL服务器并添加PHP的MSSQL扩展2使用以下代码连接并测试1NUMROWSROWNUMROWS1SRETURNED16WHILEROWMSSQL_FETCH_ARRAYRESULT1718ECHOROWEMPLOYEE1920PHP连接数据库之PHP连接ORACLE数据库PHP提供了两套函数与ORACLE连接,分别是ORA_和OCI函数。其中ORA_函数略显陈旧。OCI函数更新据说更好一些。两者的使用语法几乎相差无几。你的PHP安装选项应该可以支持两者的使用。19以上PHP连接数据库的代码使用TNSNAME(在你的TNSNAMESORA文件中指明)定义的ORACLE数据库名称、用户名称和密码连接数据库。在成功连接的基础上,ORA_LOGON函数返回一个非零的连接ID并储存在变量CONN中。注意要重启服务使其生效。一、建立连接1、ODBC首先,在PHP程序所在的服务器设置ODBC。这里32位和64位操作系统有区别。32位的从控制面板中管理工具中的数据源(ODBC)直接建立就可以了,64位的要运行CWINDOWSSYSWOW64ODBCAD32EXE从这里面设置。注意上面只的是数据库服务器为32为的,数据源设置服务器为32位和64位两种的情况。只要两个服务器建立的数据源位数一致就好。下面是ODBC建立连接代码。复制代码代码如下CONODBC_CONNECTODBC名称,用户名,密码2、连接MSSQL2000复制代码代码如下CONMSSQL_CONNECT数据库地址,用户名,密码3、连接MSSQL2008复制代码代码如下CONNECTIONINFOARRAY“UID“用户名,“PWD“密码,“DATABASE“数据库名称“CONSQLSRV_CONNECT数据库地址,CONNECTIONINFO二、输入查询代码这个都一样,可以直接写入,也可以从MSSQL中验证好后复制过来。简单点说就是把一个SQL语句赋值给一个变量。类似下面代码复制代码代码如下QUERY“SELECTTOP12数据库名称ORDERBYIDDESC“三、建立查询并取出数据1、ODBC复制代码代码如下RESULTODBC_DOCON,QUERYWHILEODBC_FETCH_ROWRESULT变量名称ODBC_RESULTRESULT,“字段名称“2、连接MSSQL2000复制代码代码如下RESULTMSSQL_QUERYCON,QUERYWHILEROWMSSQL_FETCH_ARRAYRESULT变量名称ROW“字段名称“3、连接MSSQL2008复制代码代码如下RESULTSQLSRV_QUERYCON,QUERYWHILEROWSQLSRV_FETCH_ARRAYRESULT变量名称ROW“字段名称“在PHP53及以后的版本中不附带SQLSRV库了。所以要从微软这里下载。四、关闭连接问我在自己电脑搭建了一个服务器环境,本机已经安装SQLSEVER2005和PHP服务器,IP地址是自动获取的,我在MSSQL中建了一个STUDENT_DB的数据库,库中有一个STUDENT表,用户名为SA,密码为空请解答问题1请参照如上信息写出PHPINI的配置方法、写出需要安装的东西问题2写出PHP连接MSSQL的代码答1安装SQL服务器并添加PHP的MSSQL扩展2使用以下代码连接并测试PCONNECT“DRIVERSQLSERVERSERVERDLUTPCSQLEXPRESSDATABASEYUYAN“,ZHOUHAO,950288ADODB_FETCH_MODEADODB_FETCH_ASSOCSQLSTRSELECTFROMYUYANWHEREPS教程NNORSTCONNEXECUTESQLSTR,005ORDIECONNECTERRORWHILERSTEOF/ECHORSTFIELDSPS教程NNAMERSTFIELDSPSNNOECHODAJIAHAORSTMOVENEXTRSTCLOSECONNCLOSESERVERADMINWEBMASTERDUMMYHOSTPHP77COMDOCUMENTROOT“C/WWW/APACHE2/DOCS/DUMMYHOSTPHP77COM“DOCUMENTROOT“C/WWW/APACHE2/DOCS/A_COM“SERVERNAME127002SERVERNAMEDUMMYHOSTPHP77COMSERVERALIASWWWDUMMYHOSTPHP77COMERRORLOG“LOGS/DUMMYHOSTPHP77COMERRORLOG“CUSTOMLOG“LOGS/DUMMYHOSTPHP77COMACCESSLOG“COMMONSERVERADMINWEBMASTERDUMMYHOST2PHP77COMDOCUMENTROOT“C/WWW/APACHE2/DOCS/DUMMYHOST2PHP77COM“DOCUMENTROOT“C/WWW/APACHE2/DOCS/B_COM“SERVERNAME127003SERVERNAMEDUMMYHOST2PHP77COMERRORLOG“LOGS/DUMMYHOST2PHP77COMERRORLOG“CUSTOMLOG“LOGS/DUMMYHOST2PHP77COMACCESSLOG“COMMONAPACHE22的HTTPD配置中需要将PHP设置为可识别的脚本类型。在HTTPDCONF中配置LOADMODULEPHP5_MODULE“C/PHP/PHP5APACHE2_2DLL“ADDTYPEAPPLICATION/XHTTPDPHPPHPADDTYPEAPPLICATION/XHTTPDPHPPHTMLPHPINIDIR“C/PHP“然后重启APACHE22HTTP/LOCALHOST下载INDEXHTML是因为默认目录INDEX使用的INDEXHTML在HTTPDCONF中修改DIRECTORYINDEXINDEXHTML变为下面内容DIRECTORYINDEXINDEXPHPINDEXHTML问APACHE的用途是什么答APACHE是服务器,作用就是接受用户的请求,比如我们登陆某个网站,浏览器就向服务器发送请求,APACHE接受请求并存取数据,然后返给用户。PHP只是一个程序,他接受PHP脚本进行处理,然后返回数据。返回的数据传给APACHE服务器。他们的关系就像经理接受客服的需求,然后安排给公司内部人员处理,内部人员处理好后,将东西交给经理,经理再给用户。APACHE就是协调各类数据的C/WWW/APACHE2/HTDOCS/A_COM问APACHE中怎么修改默认站点目录答昨天志明尝试更改了APACHE的默认网站根目录文件夹,发现居然网页显示不出来。从理论上来说,是可以更改的,由于本人从未有过如此想法,当时就未作过多探索。刚才,在进入文件夹时突然记起这个问题来,就顺便实现了一下,打开APACHE的配置文件HTTPDCONF找到了注意你需要在何种情况下使用名称空间,在实际运用中,你可能会需要声明两个或多个名称一样的对象来做不同的事情,那么你就可以把他们分别放到不同的名称空间中去(但接口是要相同的)。加密从PHP53开始支持ZENDGUARD加密方式,必须安装ZENDGUARDLOADER,老的ZENDOPTIMIZER将不被支持。LINUX安装ZENDGUARDLOADER支持的过程操作系统为CENTOS55,PHP版本为538(CENTOS55中的PHP默认版本较低,如果要升级到PHP最新版,可以使用REMI的REPORT源进行升级)。WINDOWS下面的ZENDGUARDLOADER不支持PHP538VC9X86THREADSAFE而,PHP538VC9X86NONTHREADSAFE又不支持APACHE。所以安装的话,就需要安装在IIS或者和NGINX搭配。1、下载最新的LINUX操作系统系下的ZENDGUARDLOADER。2、上传至LINUX服务器并解压缩,注意阅读生成目录下的README文件。全文如下(添加必要的注释)。在/ETC/PHPD/目录下创建文件ZENDINI,内容如下1ZEND_EXTENSION/USR/LIB64/PHP/MODULES/ZENDGUARDLOADERSO注意路径一定要写上,刚开始没写路径,老是加载不上ZENDGUARDLOADERSO,也可以直接将上面的配置写入/ETC/PHPINI文件中,效果一样。3、重启HTTPD服务SERVICEHTTPDRESTART。4输出PHP55正式版发布不再支持WINDOWSXP同时PHP开发者也提醒用户,PHP55也包含一些不向后兼容的内容,包括不再支持WINDOWSXP和2003系统;不区分大小写的匹配函数、类;常数名称跟LOCALE无关,这对一些使用非ASCII代码的常量名的开发者需要注意的。12版本6设想编辑1、支持UNICODE。UNICODE是有其必然,虽然UNICODE占用较多的空间,但UNICODE带来的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外一点,PHP也可以在INI文件中设定能不能开启支持UNICODE,决定权在你自己,这是一个不错的点子,关掉UNICODE的支持,PHP的性能并不会有大幅度的提升,主要的影响在于需要引用字符串的函数。2、REGISTERGLOBALS将被移除这是一个主要的决定,老的PHP使用者会觉得REGISTERGLOBALS满方便的,但是却忽略了REGISTERGLOBALS会带来程序上安全性的隐患,大多数的主机上此项功能是关闭的,印象中从PHP43X版开始,此项默认配置值即是关闭状态,PHP6正式移除REGISTERGLOBALS也代表着如果程序是PHP3时代的产物,将完全不能运用,除了改写用途外,别无他法。3、MAGICQUOTES将取消MAGICQUOTES主要是自动转义须要转义的字符,此项功能移除也符合大多数PHP开发者的心声。4、SAFEMODE取消。老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到。5、VAR别名为PUBLIC,在类中的VAR声明变成PUBLIC的别名,相信是为了兼容PHP5而作的决定,PHP6现在也可以称作为OO语言了。6、通过引用返回将出错未来通过引用返回编译器将会报错例如ACASE值2/STATEMENTBREAKDEFAULT/STATEMENT/循环结构WHILECONDITION/STATEMENTDO/STATEMENTWHILECONDITION5051525354555657585960616263646566FOR初始化判断变化/STATEMENT/数组遍历专用循环语句FOREACHARRAYASVALUEECHOVALUEFOREACHARRAYASKEYVALUEECHOKEYECHOVALUE一个PHP实例123456789FIRSTPROGRAM/PHP中STRING类型的拼接符和其它大多数采用“号运算符不一样,而是采用“号运算/在一般语言中用于对象属性和方法调用的“运算符,则和C语言的结构体一样用“PHP对面向对象的支持面向对象编程的概念不同的作者之间说法可能不一样,但是一个OOP语言必须有以下几方面1抽象数据类型和信息封装2继承3多态在PHP中是通过类来完成封装的123456789101112131415/在OOP类中,通常采用大双驼峰命名法,每个单词的首字母都大写CLASSSOMETHING/作用域修饰符PUBLIC公共的;PRIVATE私有的;PROTECTED受保护的;/属性的名称一般用全小写PRIVATEXNULL/在编程建议中,内部使用的属性应该给私有修饰符,然后通过方法取值赋值/方法的名称一般用小驼峰命名法,第一个单词全小写,剩下的单词首字母大写/因为PHP不会自动为变量使用THIS所以必须主动加上THIS伪变量来指向操作的对象PUBLICFUNCTIONSETXVTHISXVPUBLICFUNCTIONGETXRETURNTHISX当然你可以按自己的喜好进行定义,但最好保持一种标准,这样会更有效。数据成员在类中使用“VAR“声明来定义,在给数据成员赋值之前,它们是没有类型的。一个数据成员可以是一个整数,一个数组,一个相关数组(ASSOCIATIVEARRAY)或者是一个对象。方法在类中被定义成函数形式,在方法中访问类成员变量时,你应该使用THISNAME,否则对一个方法来说,它只能是局部变量。使用NEW操作符来创建一个对象1OBJNEWSOMETHING然后你可以使用成员函数通过123OBJSETX5;SEEOBJGETXECHOSEE在这个例子中,SETX成员函数将5赋值给对象的成员变量X(不是类的),然后GETX返回它的值5。可以象OBJX6那样通过类引用方式来存取数据成员,这不是一个很好的OOP习惯。我强烈建议通过方法来存取成员变量。如果你把成员变量看成是不可处理的,并且只通过对象句柄来使用方法,你将是一个好的OOP程序员。不幸的是,PHP不支持声明私有成员变量,所以不良代码在PHP中也是允许的。继承在PHP中很容易实现,只要使用EXTENDS关键字。123456789CLASSANOTHEREXTENDSSOMETHINGPRIVATEYPUBLICFUNCTIONSETYVTHISYVFUNCTIONGETYRETURNTHISY10“ANOTHER“类的对象拥有了父类(SOMETHING)的全部的数据成员及方法,而且还加上了自己的数据成员和方法。你可以使用123OBJ2NEWANOTHEROBJ2SETY5ECHOOBJ2GETYPHP只支持单继承,所以你不能从两个或两个以上类派生出新的类来。你可以在派生类中重定义一个方法,如果我们在“ANOTHER“类中重定义了GETX方法(方法重写),我们就不能使用“SOMETHING“中的GETX方法了。如果你在派生类中声明了一个与基派同名的数据成员,那么当你处理它时,它将“隐藏”基类的数据成员。你可以在你的类中定义构造函数。构造函数是一个与类名同名的方法,当你创建一个类的对象时会被调用,例如123456789101112CLASSSOMETHINGPRIVATEXNULL/新版本的构造函数放弃使用类名,而统一使用_CONSTRUCTPUBLICFUNCTION_CONSTRUCTXTHISXXPUBLICFUNCTIONSETXVTHISXVPUBLICFUNCTIONGETX13141516171819RETURNTHISX/析构函数PUBLICFUNCTION_DESTRUCT所以你可以创建一个对象,通过1OBJNEWSOMETHING6;构造函数会自动地把6赋值给数据变量X。构造函数和方法都是普通的PHP函数”_“两个下划线,魔术方法,所以你可以使用缺省参数。12PUBLICFUNCTION_CONSTRUCTX“3“,Y“5“接着123OBJNEWSOMETHING/X3ANDY5OBJNEWSOMETHING8/X8ANDY5OBJNEWSOMETHING8,9/X8ANDY9缺省参数使用C的方式,所以你不能忽略Y的值,而给X一个缺省参数,参数是从左到右赋值的,如果传入的参数少于要求的参数时,其作的将使用缺省参数。当一个派生类的对象被创建时,只有它的构造函数被调用,父类的构造函数没被调用,如果你想调用基类的构造函数,你必须要在派生类的构造函数中用PARENT_CONSTRUCT调用。可以这样做是在派生类中所有父类的方法都是可用的。123456CLASSANOTHEREXTENDSSOMETHINGPUBLICFUNCTION_CONSTRUCTPARENT_CONSTRUCT5,6/显示调用基类构造函数OOP的一个很好的机制是使用抽象类。抽象类是不能实例化,只能提供给派生类一个接口。设计者通常使用抽象类来强迫程序员从基类派生,这样可以确保新的类包含一些期待的功能。在PHP中没有标准的方法,但是如果你需要这个特性,可以通过定义基类,并在它的构造函数后加上“DIE“的调用,这样就可以保证基类是不可实例化的,在每一个方法(接口)后面加上“DIE“语句,所以,如果一个程序员在派生类中没有覆盖方法,将引发一个错误。而且因为PHP是无类型的,你可能需要确认一个对象是来自于你的基类的派生类,那么在基类中增加一个方法来实义类的身份(返回某种标识ID),并且在你接收到一个对象参数时校验这个值。当然,如果一个不好的邪恶程序员在派生类中覆盖了这个方法,这种方法就不起作用了,不过一般问题多在懒惰的程序员身上,而不是邪恶的程序员。当然,能够让基类对程序员无法看到是很好的,只要将接口打印出来做他们的工作就可以了。PHP5引入了析构函数的概念,这类似于其它面向对象的语言,如C。析构函数会在到某个对象的所有引用都被删除或者当对象被显式销毁时执行。4重载(与覆盖不同)在PHP中不支持,因为PHP是弱类型语言。在OOP中,你可以重载一个方法来实现两个或重多的方法具有相同的名字,但是有不同数量或类型的参数(这要看语言)。PHP是一种松散类型的语言,所以通过类型重载不起作用,然而通过参数的个数不同来重载也不起作用。有时在OOP中重载构造函数非常好,这样你可以通过不同的方法创建对象(变量函数)。在PHP中实现它的技巧是123CLASSMYCLASSPUBLICFUNCTIONMYCLASSNAME“MYCLASS“FUNC_NUM_ARGS/这个函数返回的是传过来参数的个数456789101112THISNAME/这里使用的是一个变量函数,以这个变量的值作为函数的名称调用PUBLICFUNCTIONMYCLASS1X/CODEPUBLICFUNCTIONMYCLASS2X,Y/CODE通过在类中的额外的处理,使用这个类对用户是透明的12OBJ1NEWMYCLASS1/将调用MYCLASS1OBJ2NEWMYCLASS1,2/将调用MYCLASS2有时这个非常好用。多态多态是对象的一种能力,它可以在运行时刻根据传递的对象参数,决定调用哪一个对象的方法。例如,如果你有一个FIGURE的类,它定义了一个DRAW的方法。并且派生了CIRCLE和RECTANGLE类,在派生类中你覆盖了DRAW方法,你可能还有一个函数,它希望使用一个参数X,并且可以调用XDRAW()。如果你有多态性,调用哪个DRAW方法就依赖于你传递给这个函数的对象类型。多态性在象PHP这样的解释语言(想象一下一个C编译器生成这样的代码,你应该调用哪一个方法你也不知道你拥有的对象是什么类型的,好,这不是重点)是非常容易和自然的。所以PHP当然支持多态性。1234CLASSCALCFUNCTIONNICEDRAWINGX/假设这是BOARD类的一个方法XDRAW5678910111213141516171819202122CLASSCIRCLEPUBLICFUNCTIONDRAWECHO“画了一个圆“CLASSRECTANGLEPUBLICFUNCTIONDRAWECHO“画了一个矩形“BOARDNEWCALCOBJNEWCIRCLE3,187OBJ2NEWRECTANGLE4,5BOARDNICEDRAWINGOBJ/将调用CIRCLE的DRAW方法BOARDNICEDRAWINGOBJ2/将调用RECTANGLE的DRAW方法用PHP进行面向对象编程一些“纯化论者(PURISTS“可能会说PHP不是一个真正的面向对象的语言,这是事实。PHP是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能想/需要在PHP中使用纯的OOP去声明类,而且在你的项目只用对象和类。随着项目越来越大,使用OOP可能会有帮助,OOP代码很容易维护,容易理解和重用。这些就是软件工程的基础。在基于WEB的项目中应用这些概念就成为将来网站成功的关键。高级OOP技术在看过基本的OOP概念后,我就可以向你展示更高级的技术序列化(SERIALIZINGPHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而且可以在以后装入对象。这就是所谓的序列化机制。PHP拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示。然而,序列化只保存了对象的成员数据而不包话方法。在PHP4中,如果你将对象序列化到字符串S中,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论