PHP教程.docx
《PHP教程.docx》由会员分享,可在线阅读,更多相关《PHP教程.docx(24页珍藏版)》请在冰点文库上搜索。
![PHP教程.docx](https://file1.bingdoc.com/fileroot1/2023-5/7/f74be166-6330-4c79-bf69-416e3eb295e6/f74be166-6330-4c79-bf69-416e3eb295e61.gif)
PHP教程
PHP教程,经验技巧
全球超过300万个互联网网站的治理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。
其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。
随你使用的水平不同,PHP能够专门简单,也能够专门复杂,能够只使用它发送HTML表格元素,还能够在PHP应用程序中集成Java和XML。
假如你对PHP有一定的了解或者看过一些初步的教材,这些技巧能够扩展你对PHP的认识,使你掌握一些常见的和高级的PHP功能。
一、把PHP安装为Apache的DSO
PHP在Linux/Unix平台上经常与Apache搭配使用,在安装PHP时,有三种安装方式可供选择:
静态模式、动态模式(DSO)、CGI二进制模式。
由于易于维护和升级,我强烈建议以DSO方式安装PHP。
例如,初次安装时假如安装的PHP仅支持数据库,随后希望再安装支持加密的模块,只要运行“makeclean”,添加新的配置选项,然后再运行“make”和“makeinstall”即可,一个新的PHP模块就会安装在Apache中适当的位置上,然后重新启动Apache,而无需重新编译Apache。
下面的步骤将安装一个全新的Apache,并以DSO方式安装PHP:
1、从Apache软件基金会得到最新版本的Apache源代码;
2、把得到的源代码放到/usr/local/或者/opt/目录下,或者你指定的任意目录中;
3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;
4、运行下面的命令,把文件安装到apache_[version]目录中:
tar-xvfapache_[version].tar
5、进入/usr/local/apache_[version]目录(或者在步骤4中安装压缩文件的目录);
6、键入下面的命令为编译Apache作预备,用你自己的路径替换其中的[path],例如,/usr/local/apache[version],现在差不多设置了mod_so的新值,它将同意Apache使用DSO模块;
7、回到提示符状态后键入make,并等待再次回到提示符状态;
8、执行“makeinstall”命令。
至此,Apache差不多安装完毕,系统将重回到提示符状态。
接下来我们开始安装PHP:
1、在PHP主页的下载区中找到最新版本的链接;
2、把文件下载到一个适当的目录中,例如/usr/local/或/opt/或者你指定的任意目录中;
3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;
4、执行下面的命令把文件安装在php-[version]目录中:
tar-xvfphp-[version]
5、进入/usr/local/php-[version]目录或在步骤4中指定的目录;
至此,差不多作好了以DSO方式安装PHP的预备工作,唯一需要修改的配置选项是with-apxs(这是Apache的bin目录中的一个文件)。
为了得到较高的性能,我没有安装对MySQL的支持模块。
./configure--with-mysql=/[pathtomysql]--with-apxs=/[pathtoapxs]
6、回到提示符状态后执行make命令,等待重新返回到提示符状态;
7、执行makeinstall命令。
至此,系统以DSO方式在Apache的模块目录中安装了PHP,并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。
回到提示符状态后,你还需要对Apache的httpd.conf文件作一些修改。
1、找到包含有ServerAdmin的一行,添加你的电子邮件地址,如下所示:
ServerAdminyou@
2、找到以ServerName开头的行,把它改为真正的值,例如:
ServerNamelocalhost
3、找到内容如下所示的小节:
#AndforPHP4.x,use:
#
#AddTypeapplication/x-httpd-php.php
#AddTypeapplication/x-httpd-php-source.phps
修改这些行的内容,使PHP4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容:
#AndforPHP4.x,use:
#
AddTypeapplication/x-httpd-php.php.phtml
AddTypeapplication/x-httpd-php-source.phps
保存文件,回到上一级目录,执行下面的命令重新启动Apache:
./bin/apachectlstart
假如在启动时没有出现错误提示信息,就能够通过创建一个名为phpinfo.php的只有如下所示一行内容的文件,对安装的Apache、PHP进行测试:
phpinfo()?
>
把那个文件保存到Apache的文档根目录(htdocs)中,然后开启扫瞄器,键入http:
//localhost/phpinfo.php地址,屏幕上就会出现许多的变量和它们的值。
假如要重新配置PHP,需要再次运行makeclean命令,然后执行带有一系列选项的./configure命令,然后再执行make和makeinstall命令,Apache的目录模块中就会出现一个新的模块,只要再重新启动Apache加载那个新的模块,就一切OK了。
二、使用PHP本身的对话
PHP4.0中最令人期待的特性应该是对对话的支持,PHP3.0的用户必须使用第三方的软件否则就不能使用对话,不支持对话一直是PHP最大的缺憾之一。
只要用户在扫瞄你的网站,你就能够利用对话维护与特定用户有关的变量,而无需建立多个cookie、使用隐藏表格字段或将信息存储在数据库中。
在一个网页上启动一个对话,就会使PHP引擎明白你想启动一个对话(假如还没有启动)或者接着当前的对话:
session_start();
启动一个对话将通过cookie向用户发送一个识不字符串(例如940f8b05a40d5119c030c9c7745aead9),在服务器端,会创建一个与识不字符串匹配的临时文件,例如sess_940f8b05a40d5119c030c9c7745aead9,那个文件中包含注册的对话变量以及它们的值。
用来显示对话的作用的最常见的例子是访问计数器。
启动PHP模块,确保PHP代码是文件的第一行,在PHP代码之前不要有空格、HTML代码和其他的代码。
因为对话会发送一个头部,因此假如在session_start()之前有空格和HTML代码,就会得到一个出错信息。
//假如还不存在一个针对某用户的用户,则启动一个对话:
session_start();
然后注册一个名字为count的变量:
session_register('count');
注册一个对话变量后,只要对话存在,名字为count的变量也就存在。
现在,count变量还没有被赋值,假如对它执行加1操作,它的值就变为了1。
$count++;
把上述内容综合在一块儿,假如还没有启动一个对话,就会启动一个对话;假如不存在一个对话id,就为用户指定一个好了,注册一个名字为$count的变量,对$count执行加1操作表示用户差不多首次访问了该网页。
要明白用户在当前的对话中访问本页面的次数,只要显示$count变量的值即可:
echo"
You'vebeenhere$counttimes.
";
全部的访问计数器代码如下所示:
session_start();
session_register('count');
$count++;
echo"
You'vebeenhere$counttimes.
";
?
>
假如重新加载上述的脚本文件,就会发觉变量count的值增加了1,专门酷吧。
还能够在对话中注册一个数组变量,假设我们注册了一个名字为$faves的变量:
$faves=array('chocolate','coffee','beer','linux');
能够象注册一个简单变量那样注册一个数组变量:
session_register('faves');
引用数组变量与引用简单变量没有什么二样,假如一个用户在网页上指出在生活中的爱好时,能够把他的爱好注册到一个被称作$faves的数组变量中,然后能够在另一个网页中专门方便地把这些爱好显示出来:
session_start();
echo"Myuserlikes:
"; while(list(,$v)=each($faves)){
echo"
- $v";}
echo"
";
?
>
然后你就得到了一个关于用户爱好的清单。
对话变量不能被查询字符串覆盖,也确实是讲我们不能输入http:
///
假如要完全删除一个对话变量,首先需要从系统中注销它:
session_unregister('count');
要完全删除一个对话变量的脚本是特不简单,如下所示:
session_destroy();
使用对话变量能够减少访问数据库的频率,使代码更加清晰,而且能够减少对用户发送的cookie的数量,它是最简单的方法了。
三、文件是我们的朋友
不管你在开发的网站规模的大小,都应该意识到代码重用的重要性,不管这些代码是HTML、依旧PHP代码。
例如,你必须至少每年改变一次包含版权信息的页脚,假如你的网站含有1000个页面,每年修改一次也是个专门烦人的事儿。
在PHP中,至少有几个函数能够关心你实现代码重用的目的,所使用的函数取决于你所重用的代码,要紧的函数有:
*include()andinclude_once()
*require()andrequire_once()
include()函数包含并对给定的文件进行计算,例如:
include('/home/me/myfile');
在include文件中的任何代码都在include()出现的代码范围内执行,你能够通过联合使用include()和fopen()在自己的服务器上包含静态文件,在另一台服务器上包含目标文件。
include_once()的功能与include()相同,二者之间的区不在于它会检查一个文件中的代码是否差不多包含在现有的脚本中,假如代码差不多存在,则可不能再次包含它。
require()函数用给定文件的内容取代它本身,这一代替过程发生在PHP引擎编译代码期间,而不是在执行期间进行,它不象include()那样会首先进行计算。
require()函数更多地用在静态元素中,而include()更多地用于动态元素中。
与include_once()类似的是,require_once()将首先检查是否差不多插入给定的代码,假如代码差不多存在,就不再插入了。
为也了解其内容,在版权信息、静态文字和其他不包含变量的元素或者依靠其他正在执行的脚本的元素中我更趋向于使用require函数。
例如:
Something
[alotofcontent]
//insertcopyright
require('/home/me/mycopyright');
?
>
另一方面,我经常在文件的开始使用include()来操纵许多的函数:
//得到函数库
include('/home/me/myfunctions');
//doPHPthingswithmyfunctions?
>
Something
[alotofcontent]
下一个问题就该是“include和require文件在哪里?
”,对那个问题简单的回答是,“系统中的任意地点。
”假如你的代码中包含有带有用户名和口令的数据库连接,你确信可不能将它们都放在文档根目录中向所有的人都开放。
included或required文件能够在系统上的任何地点,只要PHP运行的系统上的用户能够访问这些文件即可,你能够使这些文件具有任何后缀,或者不使用后缀。
使用include()和require()对在网站中的元素进行具体化是一种普遍的现象,并在需要对网站升级时,给你带来专门大的方便。
四、PHP和文件系统的维护
PHP中有许多与文件系统有关的函数,这些函数不仅能够打开文件,还能够显示目录中的内容、移动文件和其他一些功能,许多人甚至用PHP开发基于互联网的文件资源治理器。
关于文件路径的解释:
在Windows中,能够在路径中使用/和\符号,而在其他的操作系统中只能使用/符号。
出于一致性的缘故,我们统一使用/符号。
下面的脚本样例能够显示一个目录清单,注释差不多包含在代码中:
/*把要读取的目录的全路径名存入一个名字为$dir_name的变量中。
*/
$dir_name="/home/me/";
/*创建一个句柄,其值是打开一个给定目录的结果*/
$dir=opendir($dir_name);
/*建立一个文字块,用以放置列表元素(文件名字)*/
$file_list="
"; /*使用一个while语句,读取差不多打开的目录中的所有元素,假如文件的名字不是“.”或“..”,则显示列表中的名字*/
while($file_name=readdir($dir)){
if(($file_name!
=".")&&($file_name!
="..")){
$file_list.="
- $file_name";
}
}
$file_list.="
";
/*关闭打开的目录,结束PHP模块*/
closedir($dir);
?
>
--StartyourHTML-->
DirectoryListing
--UsePHPtoprintthenameofthedirectoryyouread-->
Filesin:
echo"$dir_name";?
>
--UsePHPtoprintthedirectorylisting-->
echo"$file_list";?
>
好了,我们差不多得到了一个目录清单。
需要注意的是,要读取一个文件(稍后我们将进行讲解)或目录的内容,PHP运行的系统上的用户必须至少有读取文件的权限。
下面是一个如何拷贝文件的例子:
/*把你要拷贝的原文件的全路径赋给一个名字为$original的变量中,把拷贝的文件的全路径给予一个名字为$copied的变量中*/
$original="/home/me/mydatabasedump";
$copied="/archive/mydatabasedumo_1010";
/*使用copy()函数拷贝原始文件,假如拷贝没有完成则会显示一个错误信息*/
@copy($original,$copied)ordie("Couldn'tcopyfile.");
?
>
那个例子是一个文件备份系统的原型。
在这段脚本运行时,它把文件拷贝到一个不同的位置进行保存。
略微修改一下守护程序,就能够在一天中你指定的时刻执行它,而无需用户的干预。
假定你在系统上安装了Lynx,能够创建一个守护程序的条目访问那个文件,访问那个文件会运行那个脚本并建立一个拷贝文件,下面的例子将在上午5点钟运行那个脚本,然后关闭Lynx:
05***[username]lynx-dumphttp:
//localhost/copyfile.php1>/dev/null2>&1
假如运行的是CGI版本的PHP,能够跃过Lynx部分,而直接调用二进制文件:
05***[username]php/path/to/copyfile.php1>/dev/null2>&1
五、丰富的数组函数
PHP4.0中新添加了30个与组数有关的函数,其中一些常见的函数能够推断一个数组中是否包含某个元素,对一个数组中的元素进行计数,添加或删除数组中的元素或者对数组中的元素进行排序。
假如有一个专门大的数组,而你需要找出其中是否包含一个特定的元素,就能够使用in_array()。
下面的例子将显示“Notfoundinthisarray”,因为在一个名字为$namesArray的数组中查找Albert,而在$namesArray数组中不存在如此一个元素。
$namesArray=array("Joe","Jane","Bob","Mary","Paul","Eddie","John");
$lookingFor="Albert";
if(in_array($lookingFor,$namesArray)){
echo"You'vefoundit!
";
}else{
echo"Notfoundinthisarray!
";
}
?
>
假如把$lookingFor的值改为Mary,就会得到“You'vefoundit!
”的信息,因为Mary是$namesArray数组中的一个元素。
假如要对一个数组中的元素个数进行计数,只要简单地使用count()函数即可:
$namesArray=array("Joe","Jane","Bob","Mary","Paul","Eddie","John");
$count=count($namesArray);?
>
返回的$count的值为7。
能够在一个数组的开头或结尾处添加元素,还能够使用array_merge()来建立一个包含二个或更多数组中元素的新数组,合并时,元素的顺序会按指定的顺序排列,假如原来的数组是被排过序的,在合并后需要对它重新排序。
我们能够首先利用array_push()在数组的结尾处添加一个元素:
/*建立一个数组*/
$fruitArray=array("apple","orange","banana","kiwi","pear");
/*向数组中添加元素*/
array_push($fruitArray,"grape","pineapple","tomato");
/*显示每个元素及其序号*/
while(list($key,$value)=each($fruitArray)){
echo"$key:
$value
";
}
?
>
运行上面的程序将得到下面的结果:
0:
apple
1:
orange
2:
banana
3:
kiwi
4:
pear
5:
grape
6:
pineapple
7:
tomato
假如需要在数组的开头添加元素,其代码与上面的代码差不多,唯一的不同之处是需要用array_unshift()代替array_push()。
/*建立一个数组*/
$fruitArray=array("apple","orange","banana","kiwi","pear");
/*向数组中添加元素*/
array_unshift($fruitArray,"grape","pineapple","tomato");
/*显示每个元素及其序号*/
while(list($key,$value)=each($fruitArray)){
echo"$key:
$value
";
}
?
>
运行上面的程序将得到下面的结果:
0:
grape
1:
pineapple
2:
tomato
3:
apple
4:
orange
5:
banana
6:
kiwi
7:
pear
array_merge()函数能够把二个或更多的数组合并为一个数组。
/*建立第一个数组*/
$fruitArray=array("apple","orange","banana","kiwi","pear");
/*/建立第二个数组*/
$vegArray=array("carrot","greenbeans","asparagus","artichoke","corn");
/*把这二个数组合并为一个数组*/
$goodfoodArray=array_merge($fruitArray,$vegArray);
/*显示每个元素及其序号*/
while(list($key,$value)=each($goodfoodArray)){
echo"$key:
$value
";
}
?
>
运行上面的脚本将得到下面的结果:
0:
apple
1:
orange
2:
banana
3:
kiwi
4:
pear
5:
carrot
6:
greenbeans
7