动态网页制作技术PHP的十个应用技巧

 更新时间:2016年11月25日 15:16  点击:1556

全球超过300万个互联网网站的治理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。

假如你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的熟悉,使你把握一些常见的和高级的PHP功能。

  一、把PHP安装为Apache的DSO

PHP在Linux/Unix平台上经常与Apache搭配使用,在安装PHP时,有三种安装方式可供选择:静态模式、动态模式(DSO)、CGI二进制模式。

  由于易于维护和升级,我强烈建议以DSO方式安装PHP。例如,初次安装时假如安装的PHP仅支持数据库,随后希望再安装支持加密的模块,只要运行 “make clean”,添加新的配置选项,然后再运行“make”和“make install”即可,一个新的PHP模块就会安装在Apache中适当的位置上,然后重新启动Apache,而无需重新编译Apache。

下面的步骤将安装一个全新的Apache,并以DSO方式安装PHP:

1、从Apache软件基金会得到最新版本的Apache源代码;

2、把得到的源代码放到/usr/local/或者/opt/目录下,或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、运行下面的命令,把文件安装到apache_[version]目录中:

tar -xvf apache_[version].tar

5、进入/usr/local/apache_[version]目录(或者在步骤4中安装压缩文件的目录);

6、键入下面的命令为编译Apache作预备,用你自己的路径替换其中的[path],例如,/usr/local/apache[version],现在已经设置了mod_so的新值,它将答应Apache使用DSO模块;

7、回到提示符状态后键入make,并等待再次回到提示符状态;

8、执行“make install”命令。

至此,Apache已经安装完毕,系统将重回到提示符状态。接下来我们开始安装PHP:

1、在PHP主页的下载区中找到最新版本的链接;

2、把文件下载到一个适当的目录中,例如/usr/local/或/opt/或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、执行下面的命令把文件安装在php-[version]目录中:

tar -xvf php-[version]

5、进入/usr/local/php-[version]目录或在步骤4中指定的目录;

至此,已经作好了以DSO方式安装PHP的预备工作,唯一需要修改的配置选项是with-apxs(这是Apache的bin目录中的一个文件)。为了得到较高的性能,我没有安装对MySQL的支持模块。

./configure --with-mysql=/[path to mysql] --with-apxs=/[path to apxs]

6、回到提示符状态后执行make命令,等待重新返回到提示符状态;

7、执行make install命令。

至此,系统以DSO方式在Apache的模块目录中安装了PHP,并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。回到提示符状态后,你还需要对Apache的httpd.conf文件作一些修改。

1、找到包含有ServerAdmin的一行,添加你的电子邮件地址,如下所示:

ServerAdmin you@yourdomain.com

2、找到以ServerName开头的行,把它改为真正的值,例如:

ServerName localhost

3、找到内容如下所示的小节:

# And for PHP 4.x, use:

#

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

修改这些行的内容,使PHP 4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容

<?php
/**
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @param array $ArrayData the array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
if(!is_array($ArrayData))
{
return $ArrayData;
}

// Get args number.
$ArgCount = func_num_args();

// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I )
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else
{
$SortRule[] = $Arg;
}
}

// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}

// Create the eval string and eval it.
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
return $ArrayData;
}

本款计数器用文本计数,没有用到数据库,可以实现如下功能:

  利用一个文本文件实现多个页的计数减少服务器的I/O占用率在需要纪录的文件里,只需加入很少的几行代码

  基本思路如下:

  服务器程序从文本文件中读取该页被浏览的次数,(因为所有文件向服务器提出请求时,他们的环境变量REQUEST_URI都代表他来自于何处... ...,所以,以请求文件的环境变量REQUEST_URI来辨别到底是那一页正被浏览。),将这个次数加一储存,并在调用这页的用户的计算机上显示出来。
请先看我的数据文本中纪录的数据样本,(红色为浏览次数,其前面为相应的被浏览的文件)

counter.php

<html>
<head>
<title>计数器</title>
<head>
<body>
<?php
/* 定义储存数据的文本文件 */
$counterFile="counter.dat";
/* 定义一个标记,用来辨别现在需纪录的数据是否已经文本数据中 */
$sign=False;
/* 将数据以数组的方式读入变量 $sounterData 备用, */
$counterData=file($counterFile);
/* 用count()函数计算共有多少个纪录 */
/* 用explode()函数把$counterData[$i]按符号"|"分开,并以数组的方式送回到变量$varArray里 */
/* 函数implode()与explode()刚刚相反,把数组$varArray以符号"|"连接起来送回到$counterData */
/* 还利用了环境变量$PATH_INFO
for($i=0;$i<=count($counterData)-1;$i )
 {
  $varArray=explode("|",$counterData[$i]);
  if ($varArray[0]==$GLOBALS["REQUEST_URI"])
   {
    $varArray[1] ;
    print($varArray[1]);
    $counterData[$i]=implode("|", $varArray);
    $sign=True;
    /* 找到本纪录所在的位置后, 用break 退出循环 */ 
    break;
   }
 }
/* 在这里,利用implode()这个函数的功能,将数据整理好了,一起写入文本文件中 */
/* 这样,对服务器的I/O占用就降到了最低点
$data=implode("",$counterData);
/* 打开文本文件,将数据写入 */
$fp=fopen($counterFile,"w");
fputs($fp,$data);
/* 假如需要纪录的数据不在文本里,标志$sign= Flase, 那么就往文本里添加数据 */
if (!$sign) {fputs($fp," ".$GLOBALS["REQUEST_URI"]."|"."1"."|");
print("1");
/* 关闭数据文件 */
fclose($fp);
?>
</body>
</html>

我们已经看到了这段程序的工作过程,也都知道了思路,但假如,每个文件里都这样写,岂不是太麻烦.
别慌! 我们还有PHP提供的强大的require()功能呢! 我们把counter.php写成函数,使用就方便许多了。那还等什么,下面就是你所要的函数:

counter.inc

<?php
class Spider {

var $mysql_host;
var $mysql_name;
var $mysql_pwd;
var $mysql_db;

var $parentUrl; //开始搜索的url
var $searchNum; //搜索的层数
var $url;
var $db;

//数据库连接函数
function connect_to_db($mysql_host,$mysql_name,$mysql_pwd){
$db=mysql_connect($mysql_host,$mysql_name,$mysql_pwd);
return $db;
}


//处理url,以符合标准
function dealUrl($url){
if(strstr($url,"http://")){

}else{
$url="http://".$url;
}
if(strrpos($url,'/')==strlen($url)-1){
$url = substr($url,0,-1);
}
return $url;
}

//取一个链接下的所有链接
function getUrl($url){
$fcontents = file($url);
$nextUrl = "succeed";
while(list(,$line)=each($fcontents)){

//while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-] "?)(.*)',$line,$regs)){
while(eregi('(href[[:space:]]*=[[:space:]]*"?[[:alnum:]:@/._-] [^([:space:]|>|")]*)(.*)',$line,$regs)){
$regs[1] =
eregi_replace('(href[[:space:]]*=[[:space:]]*"?)([[:alnum:]:@/._-] )("?)',"2",$regs[1]);

if(strstr($regs[1],"http://")){
}else{
$regs[1]=$url."/".$regs[1];
}

//echo "&nbsp;&nbsp;&nbsp;&nbsp;$regs[1]<br>";
$line = $regs[2];
if(strstr($nextUrl,$regs[1])){

}else{
if(strstr($regs[1],".php")||strstr($regs[1],".asp")||strstr($regs[1],".jsp")||strstr($regs[1],".htm")||strstr($regs[1],".com")||strstr($regs[1],".cn")||strstr($regs[1],".net")||strstr($regs[1],".org")){
if(strstr($regs[1],"_bak")){

}else{
$nextUrl=$nextUrl.",".$regs[1];
}

}
}
}

}
return $nextUrl;
}


//查询该URL是否需要重新搜索
function queryUrl($url,$contentDesc,$db){
mysql_select_db("SearchEngine");
$sql="select * from visited where visitedUrl='".$url."' and contentDesc='".$contentDesc."'";
$rs=mysql_query($sql,$db);
if(mysql_fetch_row($rs)){
return false;
}else{
return true;

PHP最有用的特性之一是它能够自动将表单中的变量值赋予PHP变量。这使得表单处理变得非常快捷。

因此,假如你送出一个内含输入栏位值的表单如下:

<INPUT TYPE=TEXT NAME="name" VALUE="Glen Morris">

当你用PHP处理此页面,$name变量的值就会是 Glen Morris。

因此,你可以用如下的方式把值打印出来:

echo "Hi $name!";

或者像这样测试其值:

if ($name == "Glen Morris") { echo "Please check your email."; }

这有一个用PHP处理基本表单的很好方法。例如,我们需要做一个简单的问卷调查,要求填写者必须填写他们的姓名,电子邮件地址,并回答一些我们感爱好的问题。

首先,我们会将页面拆成两个函数。因此,我们只需要写一个 PHP页面并用程序逻辑去控制对用户的显示内容就可以了,而不是写两个单独的网页(一个针对表单部分,另外一个针对处理表单的CGI脚本)。

显示表单
第一个函数用来显示表单:

<?php

functiondisplay_form() {

global $PHP_SELF;

?>

<FORM TARGET="<?php echo $PHP_SELF; ?>" METHOD=GET>

Name: <INPUT TYPE=TEXT NAME="name"><BR>

Favorite Cheese: <INPUT TYPE=RADIO NAME="cheese" VALUE="brie">Very soft French Brie

<INPUT TYPE=RADIO NAME="cheese" VALUE="cheddar">Farmhouse English Cheddar

<INPUT TYPE=RADIO NAME="cheese" VALUE="mozzarella">Italian Buffalo Mozzarella

Favorite Times to Eat Cheese:

<INPUT TYPE=CHECKBOX NAME="times[]" VALUE="m">Morning

<INPUT TYPE=CHECKBOX NAME="times[]" VALUE="n">Noon

<INPUT TYPE=CHECKBOX NAME="times[]" VALUE="d">Dinner

<INPUT TYPE=CHECKBOX NAME="times[]" VALUE="l">Late night

<INPUT TYPE=HIDDEN NAME="stage" VALUE="results">

<INPUT TYPE=SUBMIT VALUE="Thanks!">

</FORM>

<?php

}

?>

[!--infotagslink--]

相关文章

  • ps动态环绕动画效果怎么制作

    ps动态环绕动画效果是现在很多人都非常喜欢的,大多数人还不知道ps动态环绕动画效果怎么制作下面文章就给大家介绍下ps怎么制作科技感十足的动态环绕动画效果,一起来看看...2017-07-06
  • vue 实现动态路由的方法

    这篇文章主要介绍了vue 实现动态路由的方法,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-06
  • photoshop打开很慢怎么办 ps打开慢的设置技巧

    photoshop软件是一款专业的图像设计软件了,但对电脑的要求也是越高越好的,如果配置一般打开ps会比较慢了,那么photoshop打开很慢怎么办呢,下面来看问题解决办法。 1、...2016-09-14
  • Jquery Ajax Error 调试错误的技巧

    JQuery使我们在开发Ajax应用程序的时候提高了效率,减少了许多兼容性问题,我们在Ajax项目中,遇到ajax异步获取数据出错怎么办,我们可以通过捕捉error事件来获取出错的信息。在没给大家介绍正文之前先给分享Jquery中AJAX参...2015-11-24
  • Vue实现动态查询规则生成组件

    今天我们来给大家介绍下在Vue开发中我们经常会碰到的一种需求场景,本文主要介绍了Vue动态查询规则生成组件,需要的朋友们下面随着小编来一起学习学习吧...2021-05-27
  • jQuery动态添加与删除tr行实例代码

    最近由于项目的需要,需要动态的添加和删除table中的tr,感觉用JS可以实现,但是在网上找了一下,单纯的自己写JS,感觉太麻烦,而且也不好维护。于是想到了最近学的jQuery。这篇文章给大家用实例介绍了jQuery动态添加与删除tr行的方法,有需要的朋友们可以参考借鉴。...2016-10-20
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • C#中动态显示当前系统时间的实例方法

    想在网页中动态地显示当前系统的时间,找了好多,不过都是一些停在那里不动的。。。不过皇天不负有心人,终于让我找到了...2020-06-25
  • 图解Sublime Text3使用技巧

    通过本篇文章给大家介绍Sublime Text3使用技巧的相关知识,对sublime text3技巧相关知识感兴趣的朋友一起学习吧...2015-12-24
  • c#动态调用Webservice的两种方法实例

    这篇文章介绍了c#动态调用Webservice的两种方法实例,有需要的朋友可以参考一下...2020-06-25
  • 基于PHP给大家讲解防刷票的一些技巧

    刷票行为,一直以来都是个难题,无法从根本上防止。但是我们可以尽量减少刷票的伤害,比如:通过人为增加的逻辑限制。基于 PHP,下面介绍防刷票的一些技巧:1、使用CURL进行信息伪造$ch = curl_init(); curl_setopt($ch, CURLOP...2015-11-24
  • SQL Server中执行动态SQL

    本文详细讲解了SQLServer中执行动态SQL的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2022-05-19
  • jQuery为动态生成的select元素添加事件的方法

    下面小编就为大家带来一篇jQuery为动态生成的select元素添加事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-09-01
  • 分享12个非常实用的JavaScript小技巧

    这篇文章主要介绍了分享12个非常实用的JavaScript小技巧,这些小技巧可能在你的实际工作中或许能帮助你解决一些问题,需要的朋友可以参考下...2016-05-14
  • JS跨浏览器解析XML应用过程详解

    这篇文章主要介绍了JS跨浏览器解析XML应用过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-10-16
  • Python爬虫必备技巧详细总结

    本篇文章介绍了我在爬虫过程中总结的几个必备技巧,都是经过实验的,通读本篇对大家的学习或工作具有一定的价值,需要的朋友可以参考下...2021-10-22
  • 用C++面向对象的方式动态加载so的方法

    下面小编就为大家带来一篇用C++面向对象的方式动态加载so的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-04-25
  • C#实现动态显示及动态移除图片方法

    这篇文章主要介绍了C#实现动态显示及动态移除图片方法,对于C#的初学者了解图像操作有一定的帮助,需要的朋友可以参考下...2020-06-25
  • Illustrator像素级完美绘制经验技巧分享

    今天小编在这里就来给Illustrator的这一款软件的使用者们来说一说像素级完美绘制的经验技巧,各位想知道具体信息的使用者们,那么下面就快来跟着小编一起看一看。 给...2016-09-14
  • vue2 中如何实现动态表单增删改查实例

    本篇文章主要介绍了vue2 中如何实现动态表单增删改查实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-06-15