第4章
PHP安装和使用
本章我们将介绍LAMP的最后一个部分PHP的安装和使用。PHP的配置在LAMP中起决定作用,它是建立Apache与MySQL之间的桥梁。
第1节 为什么要使用PHP
PHP是一种用于创建动态Web页面的服务端脚本语言。如同ASP和JSP,用户可以混合使用PHP和HTML编写Web页面,当访问者浏览到该页面时,服务端会首先对页面中的PHP命令进行处理,然后把处理后的结果连同HTML内容一起传送到访问端的浏览器。但是与ASP或JSP不同,PHP是一种源代码开放程序,拥有很好的跨平台兼容性。用户可以在Windows NT系统以及许多版本的Unix系统上运行PHP,而且可以将PHP作为Apache服务器的内置模块或CGI程序运行。
除了能够精确地控制Web页面的显示内容之外,用户还可以通过使用PHP发送HTTP报头。可以通过PHP设置cookies,管理用户身份识别,并对用户浏览页面进行重定向。PHP具有非常强大的数据库支持功能,能够访问几乎目前所有较为流行的数据库系统。此外,PHP可以与多个外接库集成,为用户提供更多的实用功能,如生成PDF文件等。
你可以直接在Web页面中输入PHP命令代码,因而不需要任何特殊的开发环境。在Web页面中,所有PHP代码都被放置在“<? php”和“?>”中。此外,用户还可以选择使用诸如<SCRIPT LANGUAGE="php"></SCRIPT>>等的形式。PHP引擎会自动识别并处理页面中所有位于PHP定界符之间的代码。
PHP脚本语言的语法结构与C语言和Perl语言的语法风格非常相似。用户在使用变量前不需要对变量进行声明。使用PHP创建数组的过程也非常简单。PHP还具有基本的面向对象组件功能,可以极大的方便用户有效组织和封装自己编写的代码。
第2节 PHP版本
PHP当前最流行的两大版本是PHP 4和PHP 5。本书选用PHP 5.1.2为例子。它除了具备PHP过去版本的优点外,还融合了Zend Engine 2.0技术。引进了私有和保护成员变量,它们可以定义可视化的类属性,PHP 5还引入了抽象类和方法,数据抽象层(PDO),等等。
PHP 5相对于过去的版本,对XML的支持性更好、更灵活,并且对java的兼容性和强大的面向对象功能更加显著。
第3节 PHP开发工具
PHP开发工具很多,开发人员可以借助开发工具,写出更优秀的PHP程序。本书仅向读者介绍Zend开发工具。
Zend Studio是专业开发人员在使用PHP整个开发周期中的集成开发环境(IDE),它包括了PHP所有必需的开发部件。通过一整套编辑、调试、分析、优化和数据库工具,ZendStudio加速开发周期,并简化复杂的应用方案。Zend Studio设计时考虑了商务应用开发的需要,是开发者利用PHP创造强有力数据库应用软件的完美开发环境。Zend Studio具有专业和企业开发者开发、配置、调试和管理关键商务PHP应用所需的易使用性、可伸缩性、可靠性和扩展性。
第4节 安装PHP
PHP是本书最后一个安装项目,LAMP是否能工作关键是取决于PHP的安装和配置,在本节将学到如何在PHP安装过程中,根据需要添加定制PHP功能。
1.确定配置选项和扩展名
1)基本配置选项
编译时加入调试符号。
设置被安装文件的布局,TYPE是PHP(默认)或GNU。
在DIR(默认为PREFIX/lib/php)中安装PEAR。
不安装PEAR。
使用PHP自带的SIGCHLD处理器。
禁用在搜索路径中传递其他运行库。
启用libgcc的精确链接。
包含试验性的PHP流。不要使用这个选项,除非要测试代码。
定义zlib的安装目录。
使用POSIX线程(默认)。
编译共享库[默认=是]。
编译静态库[默认=是]。
为快速安装优化[默认=是]。
假设C编译器使用GNU ld[默认=否]。
阻止锁(可能破坏平行编译)。
尝试仅使用PIC/非PIC对象[默认=都使用]。
编译内存限制支持功能。
禁用URL形式的fopen包裹器,该包裹器允许通过HTTP或者FTP访问文件。
仅导出必需的符号,查看INSTALL文件以获得更多信息。
2)PHP选项
启用后使得规则和依赖关系(和有时的混乱)临时对安装程序不再有用。
设置php.ini的搜索路径,默认为PREFIX/lib。
默认启用安全模式。
在安全模式时仅允许在DIR目录中执行。默认目录为/usr/local/php/bin。
默认启用magic quotes。
默认仅用短形式的开始标签<?。
3)SAPI选项
下面列出PHP可用的SAPI(服务器应用编程接口)。
指定AOLserver的安装路径。
编译共享的Apache模块。FILE是可选的Apache apxs工具的路径,默认指向apxs。请确认指定的apxs已经安装在服务器中,并且它不是Apache源码包中的那个apxs。
编译静态Apache模块。DIR是Apache编译目录的顶层,默认为/usr/local/apache。
启用mod_charset的转换表。
编译共享的Apache 2.0模块。FILE是可选的Apache apxs工具的路径,默认指向apxs。
为使用Caudium编译PHP为一个Pike模块。DIR是Caudium服务器目录,默认为/usr/local/caudium/server。
禁止编译PHP的命令行版本(CLI)(使用它将同时强制使用—without-pear选项)。
启用潜入的SAPI编译。TYPE或者为shared或者为static,默认为shared。
为Zeus服务器以ISAPI模块方式编译PHP。
指定Netscape/iPlanet/SunONE的安装目录。
为Pi3 Web服务器编译PHP模块。
以Pike模块方式编译PHP,DIR是Roxen的根目录,默认为/usr/local/roxen/server。
使用Zend线程安全编译Roxen模块。
包含servlet支持。DIR是JSDK的安装目录。此SAPI要求java扩展必须作为共享模块编译到PHP中。
编译PHP为thttpd模块。
编译PHP为TUX模块(仅在Linux下有效)。
编译PHP为WebJames模块(仅在RISC的操作系统中有效)。
禁止编译CGI版本的PHP。
启用内部服务器重定向的安全检测。如果您在Apache下使用CGI版本的PHP,请启用该选项。
如果启用该选项,PHPCGI目录可以安全地放在Web目录树的外面,人们无法避开.htaccess的安全限制。
如果启用,CGI模块将被编译为支持FastCGI。
如果该选项被禁用,路径将不能工作,例如/info.php/test? a=b
2.下载和准备工作
获得最新的PHP系统(本书采用PHP 5.1.2,你可以根据自己的偏好,下载不同的版本),官方下载地址:http://us3.php.net/downloads.php。我们也推荐速度较快的LUPA社区,下载地址:http://tech.lupaworld. com/lamp/下载并解压缩,假如我们下载到/root目录下:
解压后会生成PHP 5.1.2目录。接下来建立安装目录,这里我们把PHP安装到/usr/local/。
3.编译安装PHP
进入解开的文件目录,按顺序执行下列操作:
以上配置选项仅仅实现了共享的Apache模块,MySQL数据库支持,更多的功能可以通过添加参数来实现。
接下来编译安装,执行:
最后拷贝php.ini配置文件。这里的php.ini-dlist文件在解压后的文件包中。
4.配置Apache和PHP
编辑httpd.conf文件:
在配置单里增加
并找到下面一行
改为
支持PHP格式。
当一切都配置好之后重启Apache:
如果使用带有mod_ssl的Apache,需要执行:
至此,PHP安装完成。
5.运行PHP
测试运行PHP,首先写一个简单的PHP脚本检测安装是否成功。
将其保存到/usr/local/Apache/htdocs/,命名为index.php文件。访问http://localhost如果看到如下页面,恭喜你PHP安装成功。
第5节 PHP语法
如果你是一位程序员或者是一个懂一点C语言的人,初次接触PHP,你一定会感到很亲切,它的语法风格接近C等基本语言。要用PHP写个网页,只需要一个简单的文字编辑器,像Linux的vi工具、Windows的记事本。而且只要有程序设计基础,不论是C、C++、Pascal、JAVA,学PHP就会很快,因为它和其他语言的语法或是结构差不多。
1.Hello world
学习一个程序语言最基本的就是显示Hello world,也就是做最基本的输出,如果不会输出,不管程序执行了什么,你也得不到任何结果。比较一下C语言和PHP语言的输出方式:
1)C语言的输出
2)PHP语言的输出
2.常量与变量
1)常量
PHP预先定义了几个常量,并提供了一种机制在运行时自己定义。常量和变量基本上是一样的,不同的是:常量必须用DEFINE函数定义。常量一旦定义好,就不能被重新定义。PHP中预先定义好的常量:
FILE
当前正在处理的脚本文件名。如果使用在一个被包含的文件中,那么它的值就是这个被包含的文件,而不是包含它的文件名。
LINE
正在处理的文件的当前行数。
PHP_VERSION
表示PHP的当前版本。
PHP_OS
PHP所在的操作系统名字。
TRUE FALSE
真值 假值
当然你可以用DEFINE函数定义更多的常量。举例,定义常量LUPA:
在PHP里面有些预设好的常量,像是基本的True以及False各代表1和0,另外PHP_OS可以显示出服务器的系统。要注意的是常量不能在任何引号中使用。
2)变量
PHP的变量是由符号($)加上变量名称组成。变量名称第一个字不得为数字,而且变量名称中也不得包含符号。
正确的变数:$ a、$ aa、$ a1、$ a_2、$_aaa
不正确的变数:$ 1a、$ aa/s、$ a $ a、$ 1 \%
变量使用范例:
在使用echo时,变量内容可以用””或是‘’或是不使用引号,但为了避免弄混,初学者尽量养成使用””的习惯。
●””:引号中间的数据可以包含字符串、数字或是变量。
●‘’:引号中间只能包含字符串及数字。
●不使用引号:只能纯字符串、数字或是纯变量。
关于全局变量与局部变量
学过C/JAVA/C++之类的朋友一定了解main(){}内声明的变量所达的区域。PHP为解释性语言而不是编译性语言,我们也知道PHP不存在main(){}主体,怎么声明呢?其实PHP页面本身就是一个main(){},只要是在页面内而非在函数内声明的变量我们都称其为全局变量。例如:
从上面的一个例子,我们可以很简单明了的看明白PHP中全局与局部变量之间的差距。
3.运算符
运算符为程序中用于执行计算动作的符号。PHP的运算符跟C很类似,大致分为以下几类:
◆算术运算符
◆比较运算符
◆逻辑运算符
◆字符串运算符
各类运算符的说明请参考接下来各小节的说明,主要介绍常用运算符。
1)算术运算符
算术运算符主要由加、减、乘、除及余数组成,如下表:
举例说明:
2)比较运算符
比较运算符由等于、大于、小于、大于等于、小于等于、不等于组成,如下表:
举例说明:
3)逻辑运算符
逻辑运算符由AND、OR、XOR、!等组成,如下表:
下表称为真值表,T代表真,F代表假,我们整理当A、B在各种情形下,各逻辑运算符的运算结果:
举例说明:
4)字符串运算符:
“.”是连接变量与变量或是变量与字符串。举例说明,如下:
再举个例子:
4.流程控制
流程控制是程序中用于控制或选择某一程序区段执行方式的语法。有了流程控制以后,可以让原先一行一行的程序产生许多变化,能够重复或控制某一段程序是否被执行。在PHP中,主要有以下几种流程控制方式:
1)if判断语句
if是最常用的判断式,只针对单一条件做判断。要是不符合指定的条件,就不执行指定的动作,然后继续执行这个条件式之后的程序。
如果执行的动作只有一个,可以省略{}。比如:
2)if else语句
if else可以针对if描述的条件,执行指定的动作,若不符合条件,则执行else的动作。
可以应用在连接数据库时告知使用者是不是联机成功,if联机成功就进行查询的动作,else送出联机失败的消息。
3)if else if语句
if else if是针对多种状况做判断,再决定执行哪一种动作,只要执行到符合的条件就执行,然后忽略之后的其他状况,结束这个判断。
4)switch
switch也有转换的意思,对指定的变量一个个的比对,switch跟if条件语句不同的地方在于就算找到了符合的条件也会继续对比下去,一旦遇到指定变量,除非对比完毕或是遇到break指令,不然会把之后所有的动作执行完。
5)for循环
php使用for循环的方式与其他语言相同,for里面包含三个部分,起始值、变量范围、变量递增、递减。
6)while循环
php使用while循环的方式与其他语言相同,在()内条件成立时,会继续执行{}内的程序代码,适合用来处理数量不确定的数据。
5.数组
PHP的数组使用相比较C语言简单得多,使用前不需要定义,所以也不需要定义数组的大小。要定义一个数组,使用array()函式:
定义数组:
但通常是不需要这个步骤的,这个定义的动作只会让程序稍微慢一点,除非要替这个数组一次加入多个元素,否则这个函式可以省略。
在数组加入元素:
也可以这样,让数组中的元素在开始就被定义好: