首页 > 编程技术 > php

PHP4和PHP5的配置异同比较

发布时间:2016-11-25 15:16

配置php4或者php5的过程中,php4,5的配置的步骤大致一样的,但是配置内容有一些差别。在LINUX等环境下编译,一般来说,只要编译的选项正确,配置也就正确了;在windows配置则需要注重以下不同点:

1. php4ts.dll 和 php5ts.dll

这个文件要拷贝到apache的bin目录下或者系统目录下

2. httpd.conf 文件加载的模块

示例如下:
# For PHP4 apache1.x.xx
LoadModule php4_module d:/www/webserver/php4/sapi/php4apache.dll
AddType application/x-httpd-php .php

# For PHP4 apache2.x.xx
LoadModule php4_module d:/www/webserver/php4/sapi/php4apache2.dll
AddType application/x-httpd-php .php

# 其中d:/www/webserver/php4是php的所在目录。

# For PHP5 apache1.x.xx
LoadModule php5_module d:/www/webserver/php5/php5apache.dll
AddType application/x-httpd-php .php

# For PHP5 apache2.x.xx
LoadModule php5_module d:/www/webserver/php5/php5apache2.dll
AddType application/x-httpd-php .php

# 其中d:/www/webserver/php5是php的所在目录。

3. 加载mysql的方式不同

在php4以及以前的版本中,mysql是集成在php中的;
而在PHP5(包括BETA)版本,mysql是作为一个模块加载的,需要设置php.ini来加载,例如
extension_dir = "D:/www/WebServer/PHP5/ext/"
extension=php_mysql.dl l

另外,PHP4,PHP5都需要系统目录下的libmysql.dll的支持,假如版本不对,即使你设置了正确的extension_dir和php_mysql.dll的参数,也会造成apache启动的时候提示phpp_mysql.dll找不到的错误。

PHP功能的强大首先在于它的大量的内置函数库,它可以让初学者也能执行许多复杂的任务,而不必安装新的库和关心底层的具体情况,而这恰恰是其它流行的诸如Perl这样的客户端语言所不具备的。由于这个教程的限制,我们仅仅学习了一些与MySQL数据库相关的一些函数(事实上,即使是这种函数,我们也没有学全)。在这最后的部分,我们会稍微扩大一下范围来看看其它对于建立一个数据库驱动的网站有用的PHP的特征。
我们首先将学习PHP的include函数,使用这个函数,我们可以在许多页面中重复使用同一个PHP代码段。我们还看到如何利用这个函数提高我们的网站的安全性。
虽然PHP一般是相当快速和有效率的,但是它会加重服务器的运行时间和工作量。对于一个高流量的站点来说,这种负担可能会达到无法接受的程度。但是这并不意味着我们需要放弃我们的站点的数据库驱动的特征。我们会看到如何使用PHP在后台建立半动态页面而不必过分加重服务器的负担。
经常有人问论坛是如何利用一个<INPUT TYPE=FILE>标记来接受文件的上载的。我们也将学习到如何用PHP实现这种功能,而且我们还会看到假如将其有效地结合到一个数据库驱动的站点中。
最后,PHP还有一个相当强大的功能是可以很简单地将动态生成的内容很方便地作为email的信息发送出去。不论你是想要使用PHP使得访问者将你的站点的内容发送给它们的朋友,还是仅仅想提供一种方法让用户可以得到他们遗忘的口令,PHP的email函数都可以很好地实现这种功能!
PHP的服务器端包含
假如你已经在Internet上工作过一段时间,你也许接触过服务器端包含(SSI)这个术语;假如你没有接触过,你可以参看有关这个问题的Matt Mickiewicz的迷你指南。
从本质上说,SSI答应你将存储在你的Web服务器上的某一个文件的内容插入到另一个文件中去,最常见的应用是将一个网站的公用设计部分写入一个小的HTML文件当中,这个文件可以被Web页面所包含。对这个小文件的所有变动立即会影响所有包含它的文件。就象一个PHP脚本一样,Web的浏览者不需要对此有所了解,因为Web服务器会在将被请求的页面发送到浏览器之前做好所有的工作。
PHP有一个函数可以提供类似的功能。但是在包含文件中除了可以含有正式的HTML以及其它静态的内容以外,还可以含有脚本程序。让我们来看看下面这个例子:
&lt;!-- include-me.inc --&gt;<br>
&lt;?php<br>
echo( &quot;&lt;P&gt;Soylent Green is made from people! &quot;);<br>
?&gt;<br>

在上面的文件中,include-me.inc包含了一些简单的PHP代码。请注重这个文件的文件名的结尾是.inc,而不是.php。这表示这个文件与一般的Web服务器所认为的PHP脚本有所不同。这会保证这个文件只有被插入到一个.php文件中才会被执行,此外这也有助于你分辨你的PHP Web页面和PHP包含文件。
你还需要下面的文件:
<!-- testinclude.php -->
<HTML>
<HEAD>
<TITLE> Test of PHP Includes </TITLE>
</HEAD>
<BODY>
<?php
include("include-me.inc");
?>
</BODY>
</HTML>


这个文件和我们以前使用过的PHP脚本差不多,它的扩展名是.php extension(假如你的服务器需要,也可以是.php3)。请注重对include函数的调用。我们指定了我们要插入的文件名(include-me.inc),PHP会试图获取这个文件并将其插入到现在的文件中以取代include。将这两个文件都上载到你的Web服务器(或者将它们拷贝到你的Web服务器的文档文件夹,假如你正在这个服务器上工作的话),然后用你的浏览器装载testinclude.php。你会看到一个包含我们的插入文件信息的Web页面的,一切和你当初预料的没有什么两样。
假如这个例子不能工作,你也许需要配置你的php.ini文件中的include_path选项。用你常用的文本编辑器打开这个文件找到以include_path开始的一行(一般是在文件的中间)。就象你所熟悉的系统PATH环境变量的设置一样,这里包含了一个目录的列表,PHP会从这些位置寻找你所要包含的文件。它应该包括"."(当前目录)。
根据你的服务器的操作系统是Windows还是UNIX,你也许需要确定是否要用到引号:
对于UNIX:
include_path=.:/another/directory

对于Windows:
include_path=".;c:anotherdirectory"

利用插入文件提高安全性
PHP脚本有时会包含一些诸如用户名、口令以及其它一些你不想公开的敏感信息。你也许已经使用过mysql_connect函数,这个函数要求你在需要访问数据库的PHP脚本中输入你的MySQL用户名和口令。虽然你可以简单地对MySQL进行设置以使得这个用户名和口令只能供PHP使用,而为会被可能出现的黑客利用(通过在第八章中学习的方法对用户表的主机字段进行设置),你也许还是需要其它的比较方便的对你的用户名和口令的保护。
“但是等一下,”可能你会这样说,“因为PHP是由服务器处理的,没人会看到我的口令,对吗?”不错,但是你是否考虑到这样一个情况,服务器对PHP的解析可能会因为偶然的原因而停止。这可能是因为某个善意的同事对软件的错误配置,也可能是因为其它的因素,假如发生了这样的情况,PHP页面会当成纯文本文件来处理,于是你的所有的PHP代码(包括你的口令)将是完全公开的!
为了预防这样的安全漏洞,你可以将包含敏感信息的代码放到一个插入文件中,然后将它放到一个不属于你的Web服务的目录结构的目录中去。将这个目录添加到你的PHP的include_path中(在php.ini中添加),你可以指定PHP包含函数所使用的目录,而不必担心其中文件的安全,因为你的Web服务器不会将其作为Web页来显示。
例如,假如你的Web服务器定义所有的Web页面必须存在于/home/httpd/及其子目录中,你可以建立一个名为/home/phplib/来保存你的包含文件。将这个目录添加到你的include_path中,这样就行了!下面的例子显示了如何将你的数据库连接代码放置到一个包含文件中:
<!-- dbConnect.inc (in /home/phplib/) -->

1不写注释

       2不使用可以提高生产效率的IDE工具

       3不使用版本控制

       4不按照编程规范写代码

       5不使用统一的方法

       6编码前不去思考和计划

       7在执行sql前不执行编码和安全检测

       8不使用测试驱动开发

       9编码时不打开自动报错(error_reporting)

       10不使用一种好的调试工具

       11不重构你的代码(refactor)

       12不采用MVC这样的分层结构

       13不知道以下等等概念:KISS,DRY,MVC,OOP,REST

       14在函数或者类里直接用print或者echo输出东西而不是返回(return)

       15不使用也不去了解单元测试

       16返回HTMl而不是data,strings,objects等类型

       17糟糕的代码和配置参数(hard code messages and configuration parameters)

       18不优化sql查询

       19不使用__autoload

       20不支持自动错误操作(应该是智能纠错)

       21使用$_GET替代$_POST去进行危险的参数传递(记得这40条都是错误的东西)

       22不知道怎样使用正则表达式

       23从未听说过sql注入和跨站脚本(安全方面,应该了解下这两个东西的英文:sql injection,cross-site scripting)

       24不支持简单配置,传递参数给类的构造函数,set/get方法,定义常量

       25不能理解OOP的优缺点

       26无论要做的东西有多小,都使用OOP

       27认为做可复用的软件就是OOP

       28不使用缺省值(don't choose intelligent defaults)

       29不使用单一配置文件

       30不想让别人看到代码,却使用.inc替换掉.php

       31不使用数据库抽象层(持久层)

       32开发时不DRY(Dont repeat yourself). (就是总开发重复的东西)

       33不开发可以重复使用的类或者方法.

       34不使用抽象类或者接口类,继承,多态,封装.

       35不使用已有的设计模式优化你的程序.

       36不允许使用者定义基础目录(这点好象php/index.html>php/index.html>php/index.html>php/index.html>php/index.html>php不太适合,毕竟不是基于操作系统的开发)

       37错误的使用命名空间,使用大家都普遍使用的单词作为前缀.(这样以后别人使用会造成冲突.,例如自己定义一个function 叫 array_push())

       38使用数据库时不使用表前缀(这个很重要...)

       39不使用或者使用一个陌生的模板引擎(方便团队开发,大家要使用常见的模板)

这是一个计算2000年01月01日起到指定日的天数的函数
<br>
(算头也算尾)日期格式为:YYYY-MM-DD
<br>


<?php
// 计算从2000年01月01日开始到某日的天数

function cal_start2end($end_day,$start_day)
{


$start_day=ereg_replace("-","",$start_day);
$end_day=ereg_replace("-","",$end_day);


if($end_day>=$start_day)
{ // 截止日期大于开始日期
if(substr($end_day,0,4)==substr($start_day,0,4))
{

if( is_int(substr($end_day,0,4)/4) )
$leap_day=29; //leap year
else
$leap_day=28;


// //同一年

if(substr($end_day,4,2)==substr($start_day,4,2))
{
// the same month
$endday_from_startday=$end_day-$start_day 1;

}
else
{
// not same month


switch (substr($end_day,4,2))
{
case "01":
$endday_from_newyear=substr($end_day,6,2) 1;
break;
case "02":
$endday_from_newyear=substr($end_day,6,2) 31;
break;
case "03":
$endday_from_newyear=substr($end_day,6,2) $leap_day 31;
break;
case "04":
$endday_from_newyear=substr($end_day,6,2) 1 $leap_day 31*2;
break;
case "05":
$endday_from_newyear=substr($end_day,6,2) 1 $leap_day 31*2 30;
break;
case "06":
$endday_from_newyear=substr($end_day,6,2) 1 $leap_day 31*3 30;
break;
case "07":
$endday_from_newyear=substr($end_day,6,2) 1 $leap_day 31*2 30*2;

3 PHP实践
PHP的许多特点与其他软件或者工具有关。利用迄今为止我们所学到的PHP知识,我们可以试着建立一个简单交互的网站。利用这一过程我们又可以学到不少东西。好吧,我们现在开始专注于一个典型个人网站的建设。

3.1 计划一个站点
一般一个个人站点包括一个欢迎页面、一个留言本页面、一个书签链接页面、一个计数器、联系信息,甚至还有照片集和一些音乐文件等等。让我们从一个标题页面、一个联系信息页面和一个简历页面开始。我们同样需要标准的通用的页面头部和底部。

标题页面--front.html

这里我们有一个非常简单的html文件:
<HTML>
<HEAD>
<TITLE>
我的个人主页--欢迎
</TITLE>
</HEAD>
<BODY>
<H1>
我的个人主页
</H1>
<H2>
欢迎
</H2>
<HR>
<P>
欢迎来我的寒舍,虽然这里现在暂时还没有什么。
</P>
<P>
不过我希望马上就可以多起来。
</P>
<HR>
<P ALIGN="CENTER">
<SMALL> <I>
Copyright ? 我自己,1999
</I> </SMALL>
</P>
</BODY>
</HTML>

联系信息页面--count.html

同样我们又有了一个简单页面:
<HTML>
<HEAD>
<TITLE>
我的个人主页--联系信息
</TITLE>
</HEAD>
<BODY>
<H1>
我的个人主页
</H1>
<H2>
联系信息
</H2>
<HR>
<P>
你可以通过1-800-PHP-INFO联系我
</P>
<HR>
<P ALIGN="CENTER">
<SMALL> <I>
Copyright ? 我自己,1999
</I> </SMALL>
</P>
</BODY>
</HTML>

标签:[!--infotagslink--]

您可能感兴趣的文章: