绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
用PHP增强UNIX/LINUX网站功能
2019-11-28 14:07:16

如果你是网络开发和维护人员,对ASP应该相当熟悉了。自从微软推出ASP技术后,由于其

在建立动态网站方面的强大功能,很快得到了广泛的应用。但由于众所周知的原因,ASP只能用于

微软自己的操作系统和服务器系统。目前基于UNIX的网络系统仍然占据大多数;而LINUX操

作系统由于其免费提供和开放源代码很受欢迎,其市场占有率迅速上升,据说已达到了17%左右;

APACHE服务器始终是网络站点的主流服务器软件。PHP的出现和逐渐完善,对基于

UNIX/LINUX系统的网络开发人员来说,无疑是个好消息:我们不用再只能羡慕ASP的

易用性而遗憾PERL/C的复杂性了!

              一 PHP特点概述

  PHP全称为Personal Home Page,于1995开始发行使用,到1998年成为一个成熟的软

件产品。目前新的版本为4.0,而常用的版本为3.0。PHP是用C语言编写而成,可运行于

UNIX/LINUX和WIN9X/NT下。

  PHP,是一种跨平台的服务器端嵌入式脚本技术。PHP页面是一种文本文件,

是在普通HTML页面文件中嵌入PHP脚本语句,由服务器解释和翻译成普通的HTML文

件,然后传送给客户端浏览器,这一点和ASP一样。

  PHP大量借用了C、JAVA、和PERL语言的语法,并加入了各种PHP自

己的特征,使WEB开发者能够写出快速的动态页面。

  PHP脚本语句段以“<?”为开始,以“?>”为结束。“<?”和“?>”之间的脚本

语句由服务器软件调用PHP脚本解释引擎解释后替换为普通的HTML脚本。

  笔者认为,PHP强大也有代表性的特点在于它的数据库层,它内置了对很多

数据库的支持,而不再需要特殊扩充,使得编写基于数据库的网页变得非常简单。目前所支持的数据库

有Oracle、Adabas D、Sybase、FilePro、mSQL、Velocis、MySQL、Informix、Solid、dBase、

ODBC、Unix、dbm、PostgreSQL、MS SQL SERVER等。针对每个数据库都有一组函数用于数据库访问和操

作,如对dBase数据库有dbase_create、dbase_open、dbase_close、dbase_pack、dbase_add_record、

dbase_delete_record、dbase_get_record、dbase_numfields、dbase_numrecords等函数,对MySQL有

mysql_close、mysql_connect、mysql_create_db、mysql_data_seek、mysql_dbname、mysql_db_query

等函数。

  同时,PHP还提供了一组图像函数,可以动态生成gif格式的图像数据流并输出到

客户端。

  此外,PHP还提供了对Socket、EMail、PDF文件、HIS(Hyperwave Information

Server)、IMAP、LDAP(Lightweight Directory Access Protocol)、文件上载、NIS等功能的支持。

              二 搭建PHP应用系统平台

  PHP可以运行于UNIX/LINUX+APACHE服务器系统或WIN9X+PWS服务器系统或WINNT+IIS服务器系统。

  下面以PWIN98+PWS4.0为例,搭建一个PHP学习和开发环境。

(一)下载PHP3 For WIN9X/NT

  到http://www.php.net,选择downloads,然后选择Download the PHP source code and Windows

distribution,选择一个下载的站点,然后选择 3.0.11 Win32 binary 就可以了。如果觉得麻烦,就

用http://www.php.net/distributions/php-3.0.11-win32.zip吧。下载文件名为php-3.0.11-win32.zip,

大小为1.68M。

(二)安装PHP3 For WIN9X/NT

  安装PHP3 For WIN9X/NT很简单,只要将php-3.0.11-win32.zip解压缩到一个目录中即可。在下面的

讨论中,假设PHP3安装在C:/Program Files/PHP3目录中。

(三)配置PHP3 For WIN9X/NT

  配置PHP3 For WIN9X/NT,就是要修改系统设置,使PWS4.0能利用PHP3脚本解释引擎解释PHP页面。

  1、把C:/Program Files/PHP3目录里的文件php3-dist.ini拷到windows98安装目录(如C:/PWIN98)

下,并改名为php3.ini。

  2、编辑php3.ini文件

    编辑php3.ini文件,将“Paths and Directories”下的“Extension_dir”项改为“Extension_dir

=C:/Program Files/PHP3”;将“browscap”下的“browscap”项改为“browscap=C:/PWIN98/SYSTEMinetsrv/browscap.ini”(PWS4.0安装目录下文件);在注册表的HKEY_LOCAL_MACHINE/SystemCurrentControlSet/Services/W3Svc/Parameters/ScriptMap的主键下,增加一个字符串值,其名称为

“.php3”(PHP3文件的扩展名),其值为“C:/Program Files/PHP3/php.exe %s %s”。

  这样,在重新启动PWS服务器软件后,PWS4.0就可以利用PHP3脚本解释引擎解释PHP页面了。

              三 PHP脚本语法简介

  在PHP3文件中,PHP脚本语句段以“<?”为开始,以“?>”为结束,用“<?”和“?>”括起来的部分就

是PHP程序段。

  PHP语法和C、Perl的语法很相似,并主要来源于C语言,如控制流语句与C几乎完全一样、变量之间的

运算符与C的类似、函数定义和调用与C的类似等。

  PHP的变量名前面必须有一个$号,如$Var1、$Var2。PHP的变量作用域规定也类似于C,即缺省认为主函

数中的变量是全局变量,而函数中的变量都是局部变量。

  在PHP中,echo和printf函数用来向HTML页面中输出HTML内容,其中echo输出无格式字符串,printf输

出格式化的字符串。如echo("<br>这个一个PHP页面<hr>")和printf("%s,%d",str1,int1)。

  如果熟悉C语言语法,学习PHP脚本语法应该不会太难。

              四 建立自己的简单PHP页面

  所谓的PHP页面就是在普通的HTML页面文件中插入一些特殊的脚本语言并以扩展名PHP保

存后的页面文件,所以可以很容易地建立一个自己的简单的PHP页面。

  下面是一个简单的PHP页面文件( test01.php3),应该不难理解。

<!-- test01.php3 -->

<html>

<head>

<title>一个简单的PHP3页面</title>

</head>

<body>

<p><h1>

        <? echo("PHP脚本解释引擎已经开始为您工作了!<hr>"); ?>

<h1>下面应出现4行语句,字体大小从4到7</h1>

<? for($i = 4;$i<=7;$i++){ ?>

<br><font size = <? printf("%d",$i) ?>>这行语句的字体大小为

<? printf("%d",$i);} ?></font>

</p>

</body>

</html>

  其中,语句 <? printf("%d",$i); ?> 是将变量 i 的值输出到HTML文件中。

  由上可见,可以先制作一个普通的HTML页面文件,然后在需要的地方插入PHP脚本语言即可.

关键是熟练应用PHP脚本语句.

  该页面虽然简单,却可以帮助熟悉和理解PHP语法.可以用浏览器查看运行效果,再用其查看源代

码的功能看一下源代码,可以看对PHP页面解释后的HTML文件.注意必须用http的方式访问PHP页面,

不能象HTML页面文件那样双击文件名以文件方式浏览.如在笔者的计算机上的访问方式为

http://wangfajun/test01.php3,因为PHP页面需要PWS等服务器软件进行解释。

              四 获取用户请求信息

  要制作动态站点页面,获取用户请求信息是必不可少的。PHP页面可以利用这些信息作为某些应用

(如商业订单信息)的依据,并对申请者的申请要求作出反馈。

  在ASP页面中,可以利用其内建对象Request获取访问者的申请信息。而在PHP页面中,可以以读取

数组的方式获取访问者的申请信息如表单信息(Form Field)、查询信息(QueryString)等。请求页

面中以POST方式发送的请求信息可以以$HTTP_POST_VARS["ItemName"]的方式获取,以GET方式发送的请

求信息可以以$HTTP_GET_VARS["ItemName"]的方式获取,Cookies信息可以以$HTTP_COOKIE_VARS[

"ItemName"]的方式获取。一般表单信息是以POST方式发送的,可以以$HTTP_POST_VARS["ItemName"]的

方式获取;查询信息是以GET方式发送的,可以以$HTTP_GET_VARS["ItemName"]的方式获取。

(一)由一个HTML或PHP3页面请求另一个PHP3页面处理

  在下面的这个例子中,读者会员资格注册申请页面要求申请者填写其姓名全称、身份证号码、

EMail地址。在收到读者申请后通知其注册成功。

  先做一个读者会员资格注册申请页面,可以是HTML页面或PHP页面.这应该不成问题.

<!-- apply.htm -->

<html>

<head>

<title>读者会员资格注册申请</title>

</head>

<body>

<H2>读者会员资格注册申请</H2>

<form method="post" action="test02.php3">

<p>

姓名全称: <input name="FullName" SIZE="20" value="姓名全称">

<p>

身份证号码: <input name="UniversalID" SIZE="15" value="888888888888888">

<p>

电子邮箱: <input name="Email" value="mailbox@yourcompany.com">

<p><input type=submit value="提交申请"><input type=reset value="重新填写">

</form>

</body>

</html>

  在申请页面中,所有的申请数据均填写在Form元素中,并且在Form的Action中指定处理

申请的页面为test02.php3。当收到申请时,对应项目的数据可以由$HTTP_POST_VARS["项目名称"]

来获得,其中"项目名称"为Form元素的名称,如"姓名全称"对应"FullName" ,如"身份证号码"对

应"UniversalID" 。现在利用这些信息来制作一个注册成功的通知页面test02.php3。

<!-- test02.php3 -->

<html>

<head>

<title>读者会员资格注册申请成功</title>

</head>

<body>

<p align="center"><H2><font color="green">读者会员资格注册申请成功

</font></H2>

<p>亲爱的<? printf("%s",$HTTP_POST_VARS["FullName"]) ?>读者:<br>

我们已经收到你的申请,并接受你的申请.你已经成为我部正式读者会员.<br>

你的读者号为CN<? printf("%s",$HTTP_POST_VARS["UniversalID"]) ?>。我们将通过你的电子信箱

<? printf("%s",$HTTP_POST_VARS["Email"]) ?>来正式通知你.此后我部举行读者沙龙活动的时间

和地点也将通过该信箱通知你.

</body>

</html>

  现在用浏览器打开申请页面apply.htm,填入对应数据后提交申请,查看反馈效果,再用浏览器

的查看源代码的功能看一下源代码,可以看对PHP页面解释后的HTML文件.

(二)由一个PHP3页面请求同一个PHP3页面处理

  下面的另一个例子中,login.php3 提供了一个用户登录页面,要求用户输入登录帐号和密码,

然后再通过Form的Action属性将表格发送给自己进行处理.在 login.php3 中,将根据帐号和密码

是否为空来判断是输入页面还是反馈页面,并给予不同的提示,若未输入帐号或密码则提示“用户

登录,请输入用户帐号和密码",否则显示用户帐号和密码。

<!-- login.php3 -->

<html>

<head>

<title>用户登录</title>

</head>

<body>

<? file://帐号或密码为空,提示用户登录输入用户帐号和密码

if(Empty($HTTP_POST_VARS["CustomerID" ] ) &brvbar&brvbar

Empty($HTTP_POST_VARS["Password" ] ))

{

?>

<p align=center><h2>用户登录,请输入用户帐号和密码</h2></p><hr>

<form method="post" action="login.php3">

<p>

用户帐号: <input name="CustomerID" value="">

<p>

用户密码: <input name="Password" value="">

<p><input type=submit value="开始登录"><input type=reset value="重新登录">

</form>

<?

}

else file://已输入用户帐号和密码,则显示用户帐号和密码

{

printf("<p><h2>用户%s登录成功,密码为%s。</h2></p>",$HTTP_POST_VARS[ "CustomerID" ],

      $HTTP_POST_VARS[ "Password" ]);

}

?>

</body>

</html>

(三)在PHP3页面中获取查询参数信息

  当用户以 xxxxx.php3?ParaName = ParaValue 的方式发出查询请求时,xxxxx.php3 可以

从$HTTP_GET_VARS[ "ParaName"] 中获取用户提交的查询参数ParaName的信息ParaValue,还可

以从count($HTTP_GET_VARS)得知用户请求参数的个数并进行相应的处理。

  当用户以 query.php3?CustomerID=7777 的方式发出查询请求时,query.php3 可以从

$HTTP_GET_VARS[ "CustomerID" ] 中取得查询参数 CustomerID的值为 7777,

count($HTTP_GET_VARS) 为 1.

  当用户以 query.php3?CustomerID=7777&Password=DogIsDog 的方式发出查询请求时

,query.php3 可以从$HTTP_GET_VARS[ "CustomerID" ] 中取得查询参数 CustomerID 的值为

7777,从$HTTP_GET_VARS[ "Password" ] 中取得查询参数 Password的值为 DogIsDog ,

count($HTTP_GET_VARS) 为 2。

  下面的例子(query.php3)用于获取用户指定的查询参数,并显示出来反馈给用户。当以

query.php3?CustomerID=1111&StartDate=1999.01.01&EndDate=1999.06.30的方式发出请求时,

得到的结果为:

您指定了3个查询参数如下:

第1个参数CustomerID的值为:1111

第2个参数StartDate的值为:1999.01.01

第3个参数EndDate的值为:1999.06.30

<!-- query.php3 -->

<html>

<head>

<title>查询参数处理</title>

</head>

<body>

<?

    $QueryCount = count($HTTP_GET_VARS);//查询参数个数

    printf("<p><H2>您指定了%d个查询参数如下:</H2>",$QueryCount);//显示查询参数个数

    file://列举各个查询参数及其值

    for( $intIndex = 0 ;list( $key, $val ) = each( $HTTP_GET_VARS ); $intIndex++ )

      {

        printf("<p><H2>第%d个参数%s的值为:%s</H2>", $intIndex+1, $key, $val);

      }

?>

</body>

</html>

(四)、获取用户的Cookies信息

Cookies 可以服务器和客户端之间双向传递,它记录了特定用户的某些信息.在PHP

中可利用$HTTP_COOKIE_VARS["CookieItemName"]获取用户的Cookies信息。下面语句可用来显

示用户的所有Cookies信息:

<?

    $QueryCount = count($HTTP_COOKIE_VARS);//Cookie数目

    printf("<p><H2>您有%d条Cookies信息如下:</H2>",$QueryCount);//显示Cookie数目

    file://列举各个Cookie及其值

    for( $intIndex = 0 ;list( $key, $val ) = each( $HTTP_COOKIE_VARS ); $intIndex++ )

      {

        printf("<p><H2>第%d条Cookie(%s)的值为:%s</H2>", $intIndex+1, $key, $val);

      }

?>

(五)、获取服务器环境信息

  在PHP中,服务器环境信息以一组全局变量的形式给出,以供PHP脚本程序访问。

  常用的服务器环境变量信息有:

$GATEWAY_INTERFA

CE:网关界面如CGI/1.1

$HTTP_ACCEPT:客户端可接受的MIME类型列表如*/*

$HTTP_ACCEPT_LANGUAGE:服务器采用的语言,"en"表示英文,"zh-cn"表示简体中文

$HTTP_HOST:HTTP服务器名称

$HTTP_USER_AGENT:发出请求的客户浏览器类型,根据用户请求信息和browscap.ini来识别,

         如Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)

$LOCAL_ADDR:本机服务器名称

$PATH_TRANSLATED:脚本文件的文件全名(含实际路径),如

C:/Inetpub/wwwroot/php3/query.php3

$REMOTE_ADDR:发出请求的客户端机器的IP地址

$REMOTE_HOST:发出请求的客户端机器的名称

$REQUEST_METHOD:发出请求的方法(Post/Get/Head)

$SCRIPT_NAME:被调用的脚本文件的路径及文件名称如/php3/query.php3

$SERVER_NAME:服务器的名称或IP地址

$SERVER_PORT:HTTP服务端口号,一般为 80.

$HTTP_REFERER:客户端发出CGI程序请求的页面的URL

$SERVER_PROTOCOL:服务器软件所用的协议如HTTP/1.1

$SERVER_SOFTWARE:服务器软件的名称及版本如Microsoft-IIS/4.0

                 五 向用户发送信息

  可以利用PHP提供的函数很灵活地控制向客户端发送的信息的内容和方式.例如可以动态设置反馈

信息、设置客户的Cookie、页面重新定位等等。

(一)、利用 echo、printf等PHP函数控制发送的信息内容

函数 echo、printf 可以向发往客户端浏览器的HTML文件中直接输出内容。

在下面的例子中,selecolr.php3 要求用户输入一个颜色名称,用户确认后将用户申请发

往同一个页面selecolr.php3,然后用用户指定的颜色将颜色名称显示出来.

<!-- selecolr.php3 !>

<html>

<head>

<title>选择颜色</title>

</head>

<body>

<?

if( Empty( $HTTP_POST_VARS[ "ColorName" ] ) )

{//未输入颜色名称,提示输入颜色名称

  echo("<H4>你只需选择颜色名称,我来显示</H4>");

?>

<form method="post" action="selecolr.php3">

<p>

颜色名称: <input name="ColorName" value="red">

<p><input type=submit value="显示吧"><input type=reset value="想重选">

</form>

<?

}

else//已输入颜色名称,用指定颜色来显示颜色名称

  printf("<H2>你选择的颜色是<font color =%s>%s</font></H2>",

          $HTTP_POST_VARS[ "ColorName" ],$HTTP_POST_VARS[ "ColorName" ]);

?>

</body>

</html>

(二)、利用 header 函数进行URL页面重新定位

假如由于业务上的原因,你的站点的域名或IP地址发生了变化,就象Borland变成了

Inprise一样,老顾客在用原来的域名访问时,可以用 header 函数直接将其引导到新的

站点上去;假如要求用户在访问本页面前必须先访问另外一个页面,也可用 header 函数

直接将其引导到应该去的页面上去,而不是发出用户无权访问该页面的信息.

值得注意的是,必须在向客户端发送任何信息前使用 header 函数,否则会引起错误.

一般应该在页面的条语句将用户引导另一个URL。

在下面的例子中,若用户调用本页面,则将其引导到另一个页面 selecolr.php3.

<?

file://页面重新定位到selecolr.php3,必须用exit结束页面处理过程

header("Location: selecolr.php3");exit;

?>

<!-- redirect.php3 !>

<html>

<head>

<title>重新定向</title>

</head>

<body>

<p> 你不可能进入到本页面,否则就是我的失败.

</body>

</html>

(三)、利用 header 函数改变页面内容解释方法

  在HTML页面代码中,经常会看见下面一个句子

  <meta http-equiv="Content-Type" content="text/html">

  其中,它用于指定HTML页面被浏览器解释的方式。当 content="text/html"时,浏览器

将代码解释为普通HTML页面并显示给用户;当 content="text/plain" 时,浏览器将代码不加任

何解释地显示给用户;当 content = "image/jpeg"是传递图形文件; 当未指定时,ContentType

默认为 "text/html".在PHP页面中,可以用 header 函数改变 ContentType 的类型,即可以控制

浏览器解释HTML文本的方式,如 header("ContentType: image/gif") 表示页面返回结果为一个

GIF类型的图形。

(四)、利用 SetCookie 函数设置客户端Cookies

  通过设置SetCookie函数可以增加、修改或删除客户端的Cookies。当要设置的Cookie不存在时,

将创建一个新的Cookie,其值为要设置的值;Cookie存在时,以新值代替原有的值。

  值得注意的是,应在页面的Header发送之前设置Cookie。

  在下面的例子中,cookie.php3 用来设置一个名称为 wfj 的Cookie的值.调用时将显示

上次设置的Cookie(wfj)的值。

<?

file://cookie.php3

$OldCookieValue=$HTTP_COOKIE_VARS[ "wfj" ];//上次设置的Cookie(wfj)的值

if (!(Empty( $HTTP_POST_VARS[ "CookieValue" ] )))

{//已输入Cookie(wfj)的值,则进行Cookie设置,显示设置成功消息

SetCookie( "wfj", $HTTP_POST_VARS[ "CookieValue" ] );

?>

<html>

<head>

<title>Cookie设置成功</title>

</head>

<body>

<?

printf("<p>Cookie(wfj) 已经由%s设置为

s",$OldCookieValue,$HTTP_POST_VARS[ "CookieValue" ]);

printf("<p>下次调用时你会看到的");

}

else//未输入Cookie(wfj)的值,则提示输入Cookie值

{

?>

<html>

<head>

<title>Cookie设置</title>

</head>

<body>

<?

printf("<p>Cookie(wfj) =%s",$OldCookieValue);

printf("<p><hr><H4>你只需设置Cookie,我来显示</H4>");

?>

<form method="post" action="cookie.php3">

<p>

Cookie设置: <input name="CookieValue" value="wangfajun">

<p><input type=submit value="设置吧"><input type=reset value="想重选">

</form>

<? } ?>

</body>

</html>

  六 服务器端脚本和客户端脚本混合编程

  当使用<script></script>编写一段脚本程序时,如果没有指定Language=php,则认为其

中的脚本程序在客户端执行,此时可以在程序中混合使用服务器端主要脚本和客户端脚本,这

样就可以根据客户端的请求灵活地控制客户端脚本的执行,使对客户的反馈更具有个性化。

在混合使用时,服务器端脚本要以“<??>”的形式嵌入,以示区别.

  下面就是一个服务器端脚本和客户端脚本混合编程的例子(csscript.php3).在该例子中,

将输出10条记录,并为每条记录定制不同的函数,使每个函数能在浏览器的状态栏显示不同的

内容,并在鼠标经过记录时发生。

<!-- csscript.php3 -->

<html>

<head>

<title>服务器端脚本和客户端脚本混合编程</title>

</head>

<body>

<H1>鼠标移到各记录上的【项目名称】上时,请注意状态条内容的变化</H1>

<table border = "1">

<tr><td>项目名称</td><td>状态条应出现的内容</td></tr>

<? for( $intIndex = 1; $intIndex <= 10; $intIndex++) { ?>

  <tr>

        <td onmouseover = "Status<? echo($intIndex) ?>()">

                        <?echo($intIndex)?></td>

        <td>鼠标现在正指向项目<? echo($intIndex) ?></td>

  </tr>

  <script language = JavaScript>

  <!--

        function Status<? echo($intIndex) ?>()

  {

      window.status = "鼠标现在正指向项目<? echo($intIndex) ?>";

  }

  -->

  </script>

<?}?>

</table>

</body>

</html>

    七 增加注释

  在编程时添加注释是一个好的习惯.PHP 允许在页面代码中添加注释,具体的注释方法与C

语言注释语法相同,如可用双斜杠“//”作为注释符。

  八 利用 Include 来实现功能模块化

  可以将常用的功能函数存于一个PHP文件,在其它PHP页中要用其中的功能时,将包含函数的

PHP文件包含在调用函数的PHP文件中.这时可使用 Include 函数。具体语法为:

include($FileName);

使用时应该注意:

  1、应避免自包含,即 File1 包含 File1;在多个文件中有包含语句时,应避免间接自包含

即循环包含,如File1包含File2,File2包含File3,File3包含File1.

  2、被包含的脚本语言的类型必须是PHP语言类型或<script></script>脚本语句段。

  以上是学习和使用PHP创建动态、交互式站点的一些入门知识,有了这些基础知识,就可以发挥

以前自己积累的编程经验,自己动手学习和探索用PHP创建基于UNIX/LINUX网站系统的动态、交互式

站点的网络应用系统了。

————————————————

版权声明:本文为CSDN博主「zdg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/zdg/article/details/2115

分享好友

分享这个小栈给你的朋友们,一起进步吧。

星说
创建时间:2019-11-28 12:45:43
作为炎黄子孙,我们有很多知识渊博的祖人,这个祖人指的是在各领域登峰造极的学者论说,我们跟随强大基因的路线,学习,深化自己的知识体系,优化环境。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • unnamed persona
    栈主

小栈成员

查看更多
  • 外星人6
  • supergirlxu
  • unnamed person1
  • daxuesheng
戳我,来吐槽~