【php精品源码栏目提醒】:网学会员为广大网友收集整理了,【精品】PHP程序设计(上) - 互联网,希望对大家有所帮助!
下载 第1章 什么是
PHP PHP是编程语言和应用程序服务器的结合。
PHP和其他的编程语言类似,使用变量存储临 时数值,使用操作符处理变量。
PHP的真正价值在于它是一个应用程序服务器。
当谈到应用程序服务器的时候,是指一个把几个不同的技术组合为一个完整的套件的程 序。
这些技术包括: 一个强壮的编程语言。
存取数据库中存储的数据。
支持 Internet协议,尤其是电子邮件和 HTTP协议。
注意 应用程序服务器有许多其他的特性,这里只列出了最基本的特性。
由于提供了这些多种不同技术的前端接口,因此
PHP可以使工作变得很容易。
本章将简要讲述
PHP的起源、特性以及它在应用软件开发中起到的作用等。
1.1 起源 P H P是由Rasmus Lerdorf创建的,它开始是一个简单的用 P e r l语言编写的程序,用来记录 L e r d o r f自己在线简历的访问者。
以后它又被用 C语言重新写过,范围扩大到访问数据库。
在 这期间,许多人向 Lerdorf要此程序的拷贝,以便自己使用。
Lerdorf为此写了一些介绍此程序 的文档,并发布了
PHP v1.0 。
以后,越来越多的人开始使用 P H P,并强烈要求增加一些其他 的特性,如循环语句和数组变量等。
这时,其他的一些程序员也开始参与 P H P
源码的编写(主要有 Zeev Suraski和Andi Gutmans),很明显,此时的
PHP必须重新编写。
因此,
PHP v3.0 就出现了。
1.2 特性
PHP的特性包括: 开放
源码 — 所有的 P H P
源码都可以得到。
事实上,所有的
源码都包含在随书附带的光 盘中。
没有运行费用 —
PHP是免费的。
基于服务器端 — 由于P H P是在We b服务器端运行的, P H P程序可以很大、很复杂而不 会降低客户端的运行速度。
跨平台 —虽然本书是以 Linux为重点介绍的,但
PHP程序可以运行在 UNIX、Linux或者 Windows操作系统下。
嵌入HTML— 因为
PHP语言可以嵌入到 HTML内部,所以
PHP很容易学习。
简单的语言 — 和J a v a、C 不同, P H P语言坚持以基本语言为基础,但它的功能也强 大到足以支持任何类型的 Web站点。
效率高 — 和其他的解释性语言相比, P H P消耗较少的系统资源。
当 P H P作为 A p a c h e 2 计计
PHP3 程序设计 下载We b服务器的一部分时,运行代码不需要调外部二进制程序,服务器解释脚本不需要承担任何额外负担。
分析XML—用户可以组建一个可以读取 XML信息的
PHP版本。
数据库模块 — 用户可以使用
PHP存取Oracle、Sybase、MS SQL、Adabase D、MySQL、 m S Q L、P o s t g r e S Q L、d B a s e、F i l e P r o、S o l i d、Unix dbm、I n f o r m i x / I l l u s t r a等类型的数 据库,以及任何支持 ODBC标准的数据库。
文件存取 —
PHP有许多支持文件存取的函数。
文本处理 —
PHP有许多函数处理字符串,其中包括模式匹配的能力。
复杂的变量 — P H P支持标量、数组、关联数组等变量,这给用户提供了支持其他高级 数据结构的坚实基础。
图像处理 — 用户可以使用
PHP动态地创建图象。
更多的其他功能!1.3
PHP需要花费多少钱 P H P是免费的。
所有的
源码、文档都可以免费地复制、编译、打印和分发。
用户的任何一个用 P H P编写的程序都属于用户自己,可以按照自己的意愿进行处理,而不需要付任何版税。
就
PHP本身而言,用户可以无限制地发布自己编写的程序。
然而,
PHP并不是彻底的“公共领域”代码。
如果
PHP源码是完全的公共领域代码,很可能就有人对
PHP的
源码做很小的修改,然后编译并出售 — 换一句话说,偷窃了原创作者的成果。
但从另一方面说,如果不公布
源码,就很难使用户感到放心。
G N U通用公共许可 GNU General Public License是一种发布免费软件的方法,它可以避免其他人占有你的劳动成果。
在符合 G N U许可的条件下,
源码可以自由地发布,并且任何人都可以使用,但是任何来源于此代码的程序必须以同样的许可方式发布。
换句话说,如果用户从任何 G N U许可下的
源码中得到代码而编写自己的程序,就必须给任何想得到
源码的人发布自己的
源码。
1.4
PHP语言可以嵌入 HTML中 当使用者使用经典程序设计语言(如 C或P a s c a l)编程时,所有的代码必须编译成一个可执行的文件,然后该可执行文件在运行时,为远程的 We b浏览器而产生可显示的 H T M L标记。
但是, P H P 并不需要编译(至少不编译成可执行文件)。
使用者可以把自己的代码混合到 ,PHTML中。
例如,下面的代码将显示“ Helloworld” HP代码在下面以黑体字显示: P H P应用程序服务器是紧密集成到 Apache We b服务器中的,可以在一个程序内同时调用它们两个。
当Web浏览器请求
PHP Web页面的时候,Web服务器的
PHP部分将被调用进行解释。
下载 第1章 什么是
PHP计计 3Web服务器在请求的 Web页中寻找ltPHP. . . gt标记,并按要求执行这些
PHP代码。
由
PHP代码生成的输出将替代 ltPHP . . . gt 标记。
例如,当
PHP代码运行后,以前的 Web页面将变成如下所示的内容: 注意,所有的 P H P代码都消失了,仅仅留下了 H T M L语句。
而由 P H P代码生成的 H T M L语句在上例中以黑体的形式显示。
1.5
PHP语言是在 Web服务器端运行 当开发互联网应用程序时,很重要的一点是要清楚应用程序是在哪一端运行的。
P H P总是运行在服务器端。
不要嘲笑我总强调这一点。
在以后考虑对应用程序的某些特性进行规划时,有的人可能就会在应用程序在哪里运行这个问题上搞错。
由于Java applet、ActiveX或JavaScript 都是运行在客户端的 Web浏览器中的,因此
PHP不能直接和它们进行比较。
然而可以很容易地将这些语言与
PHP结合在一起。
使用
PHP可以很方便地生成所需要的任何 H T M L代码,当然也就能激活 Java applet和A c t i v e X控件,还可以动态生成J a v a S c r i p t语句。
当对互联网应用程序开发还很陌生的时候,这也许没有什么意义,但是在读完本书后,这一切就会变得十分清晰了。
1.6
PHP无处不在 “无处不在”是常使用的充满激情的词语,到 1 9 9 9年7月,将有 6 0万左右的 We b站点使用P H P,1 9 9 9年夏天有关 L i n u x和开放
源码运动的大发展很可能使 P H P团体有突破性发展。
可以在http://www.
php.net/usage.
php3站点上看到它的发展趋势图表。
此外,P H P邮件列表每天能收到大约 8 0个电子邮件,每个月能收到大约 2 5 0 0个电子邮件,这说明 P H P是一个非常活跃的开发团体。
使用 P H P的商业公司包括三菱汽车公司、沃尔沃、Red Hat 公司、ETrade、第一美国银行、旧金山巨人集团和圣迭弋动物园等等。
1.7
PHP和C或Java相似吗 P H P程序和C程序有略微相似的地方,这是由于 P H P来源于 C、P e r l和J a v a。
一些对 C语言来讲比较麻烦的方面(如处理字符串的技术),由于采用了和 P e r l相近的技术,在 P H P中就不再麻烦了。
PHP中不包括Java中的一些面向对象特性。
P H P能很好地处理某些低级的任务,如果代码需要运行得特别快,就可以很方便地使用 C为
PHP程序编写模块。
1.8 P H P比C o l d F u s i o n、Active Server Pages 或Java Server Pages更好 吗? 可以说是,也可以说不是。
4 计计
PHP3 程序设计 下载 回答“是”,是由于它的费用(免费)以及可以通过邮件列表、 I R C而在世界范围内有广泛的支持。
同时
PHP还在不断地发展着,如果想要一个
PHP现在没有的特性时,请等待几个月,很快就有人为
PHP编程而加上此种特性。
回答“不是”,是由于商业软件有比 P H P更多的特性。
例如, A l l a i r e公司C o l d F u s i o n有一个已证实可靠的搜索引擎组件。
微软的 Active Server Pages技术提供了与Outlook、电子邮件和工作组程序相结合的能力。
Java Server Pages 让使用者可以使用互联网上的大量开放
源码模块。
1.9 总结 对于遍及互联网上的 P H P,本章仅仅简要提到了它的一些特性,也介绍了当设计互联网应用程序时,
PHP为什么是最好的编程工具之一。
下一章“安装
PHP”将一步步地介绍
PHP的编译过程、安装过程以及测试过程。
下载 第2章 安 装
PHP 本章介绍如何编译及安装 gcc C编译器、 M y S Q L数据库和带有 P H P模块的 Apache Web 服务器。
如果使用者不能确定自己的计算机需要哪些组件,请完全安装。
本章的安装指令是以 Red Hat Linux v5.2和v6.0为基础的。
由于安装在 v5.2上的C编译器版本不够新,以至于不能完全编译
PHP,为此我还从互联网上下载了 gcc v.2.8.1并讨论 了其编译说明。
注意 本章的内容可以从网址为 h t t p : / / w w w. m t o l i v e . c o m / p h p b o o k /的站点中下载。
采 用剪切和粘贴技术可以避免输入错误。
本章将按下列步骤编译安装以下软件: Apache v.1.3.4— 世界上最流行的 Web服务器。
gcc v.2.8.1—来源于GNU的C和C编译器。
MySQL v.3.22.16b-gamma— 全世界范围内许多人使用的数据库。
PHP v.3.0.11— 本书主要介绍的软件。
从 http://www.
php.net(或此站点的镜像站点)直 接下载可以得到较新的版本。
本章的其他步骤仍然适用。
expat— 用于读取和处理 XML文档的函数库。
phplib— 用于进行会话管理的
PHP函数库。
libiodbc— 主要用于存取在非 UNIX计算机中数据库的 ODBC函数库。
MyODBC—
PHP、iODBC和MySQL之间的函数库。
本章并不是介绍编译应用程序所需要的那些指令,而只是简单地进行描述。
总之,本书的重点是介绍 P H P语言,而不是 C语言。
每一个应用程序的编译对我来说都十分清楚,希望每个读者也能顺利地进行编译。
假如你确实碰到了一些问题,可以在某个 IRC频道中有礼貌地询问,或者尝试使用新闻组(可以从 http://www.dejanews.com访问)得到帮助来解决问题。
然而,最好的帮助还是来自 http://www.
php.net 上的
PHP邮件列表。
在开始编译过程之前,让我们先讨论一下如何从错误中恢复。
在得到有关错误的帮助以后,可以采用以下的命令重新初始化
源码目录: rm config.cache — 几乎所有的 L i n u x应用程序都使用 c o n f i g u r e命令来检查自己的系统, 以寻找有关如何剪裁编译过程的信息。
检查的结果将存储在一个名为 c o n f i g . c a c h e的文 件中。
如果移走此文件,将迫使配置程序从头开始重新检查系统。
make distclean— 所有的用 C语言编写的 L i n u x应用程序都是用 m a k e程序编译的。
m a k e 程序会寻找每一个源文件,以确认是需要编译还是已经编译过的。
make distclean命令可 以“重置”所有的源程序,以便能重新编译它们。
make clean — 有的应用程序不支持 make distclean命令,而用 make clean命令来代替。
make clean命令“重置”所有的源程序,以便能重新编译它们。
即使要安装的一些应用程序不支持以上的每个命令,但是试一下也不会有什么害处。
6 计计
PHP3 程序设计 下载 注意 Red Hat v5.2使用glibc库。
如果用户从互联网中下载或更新在本章中安装的程 序时,必须知道 g l i b c的信息。
用户可以使用 rpm -q glibc命令来查出已经安装的 g l i b c 库的版本号。
在作者的系统中,使用 rpm -q glibc命令将显示 glibc-2.0.7.29。
2.1 基本概念 也许有人以前从没有编译过 L i n u x应用程序,在此介绍一些基本概念,以便能诊断出问题所在。
1. tar tar,即tape archiver,它可以把几个文件组合成一个文件,并可以选择是否进行压缩。
这个命令过去通常用来进行备份,以便使数据存储在磁带中。
当 t a r文件被压缩时,它们有一个.gz的后缀;当 tar文件没有压缩时,它们有一个 .tar的后缀。
2. gcc gcc 是GNU的C编译器。
它的工作是把人可以看懂的源代码文件编译成机器可以读懂的目标文件。
C源文件通常有 . c的后缀名,目标文件通常有 . o的后缀名。
如果编译工作不能正常进行,就是碰到了一个编译期的错误,或者说:语法错误。
在大多数情况下,不彻底的编译通常是编译器找不到一个或几个包含文件而产生的。
包含文件都有一个 . h的扩展名,通常用来定义不同的系统信息,以及将多个不同的 .c文件所共有的信息收集在一起。
3. make m a k e是一个常用的工具程序,是用来帮助进行编译的。
它的工作是用来只编译那些还没有编译过的源文件。
编译 . c文件将生成一个 . o文件,如果 . c文件比 . o文件更新,也就是说,到上次编译之前源文件被编辑过,那么 m a k e将会重新编译 . c文件。
m a k e指令一般是寻找一个Makefile文件,在这个文件中包含有一个或多个能执行的目标,例如, make clean会告诉make执行清除目标。
4. ld l d是G N U的链接程序。
它的工作是把所有的目标文件和库链接起来,创建一个单一的可执行文件。
幸运的是,基本上不用手工运行这个程序,因为 Makefile将会考虑到所有的编译细节。
5. ldconfig l d c o n f i g会为在多个库目录(在 / e t c / l d . s o . c o n f中指定)中寻找共享库。
共享库常被多个应用程序使用,它们的文件名中的某个地方有 . s o,例如, l i b q t . s o . 1 . 4 2是一个共享库。
在编译完毕之后,有可能需要在 /etc/ld.so.conf文件中增加一个目录,并且运行 ldconfig -v命令。
6. ./configure configure将会在计算机中寻找一些关键信息,例如,安装的是哪一种 C编译器、包含文件在哪里等等。
然后, c o n f i g u r e将会按照所用的计算机配置重新修改 M a k e f i l e文件。
应该使用. / c o n f i g u r e在当前目录下运行程序,以避免偶然运行 PAT H环境变量中的目录下的其他程序。
7. 符号连接 符号连接允许使用者可以为一个已经现有的文件指定另一个不同的名字。
例如,使用者有可能想把一个名为 l i b q t . s o . 1 . 4 2的文件称为 l i b q t . s o . 1。
符号连接基本上可以使用户把一个文 下载 第 2章 安装
PHP计计 7件复制到另一个不同的目录下面,但事实上并没有真正复制此文件。
第二个文件实例只是简单地指向第一个文件实例。
使用符号连接至少可以有两点好处,第一点是符号连接可以节省硬盘空间,少到只有 1 6字节;第二点有一点微妙,让我们先看一下一个名为 l i b q t . s o . 1且指向l i b q t . s o . 1 . 4 2的符号连接。
如果需要升级到 l i b q t . s o . 1 . 8 8,该怎么办呢?用户只要简单地改变符号连接,使 l i b q t . s o . 1指向l i b q t . s o . 1 . 8 8,而非 l i b q t . s o . 1 . 4 2即可。
这意味着涉及到 l i b q t . s o . 1的程序将自动地使用这个库的新版本。
按照惯例,符号连接常用于完整的发布版本号。
换句话说,libqt.so.1.88和libqt.so.2.32应该有两个不同的符号连接(分别为 libqt.so.1和libqt.so.2)。
2.2 编译前的准备工作 以下步骤将为系统做好编译前的准备工作: 1 mkdir /usr/local/src — 我选用 / u s r / l o c a l树作为所安装应用程序的根目录。
其他人可能选用/ u s r / o p t、/ o p t或/ v a r目录。
为了更方便地按照本章中的指令操作,请选用 / u s r / l o c a l目录作为根目录。
当编译完成以后,用户可以把这些文件复制到不同的目录中。
注意 为了能完成本章中的其他步骤,使用者必须具备 root权限。
2 cd /usr/local/src — 转到源文件目录下。
3 下载以下文件(可以从 http://www.mtolive.com/phpbook站点下载),或者从随书附带的光盘中复制这些文件到 /usr/local/src目录下: apache_1.3.4.tar.gz gcc-2.8.1.tar.gz mysql-3.22.16b-gamma.tar.gz
php-3.0.11.tar.gz expat.tar.gz phplib.tar.gz libiodb-2.50.3 myodbc-2.50.24-src 4 使用t a r命令解压缩以上文件。
t a r的x选项为解开选项, v选项将在屏幕上显示文档中解出来的文件名, z选项为解压缩选项, f选项用于在命令行中指定 .tar文件名。
tar xvzf apache_1.3.4.tar.gz tar xvzf gcc-2.8.1.tar.gz tar xvzf mysql-3.22.16b-gamma.tar.gz tar xvzf
php-3.0.11.tar.gz tar xvzf expat.tar.gz tar xvzf phplib.tar.gz 5 gcc -v 确定系统中现有 g c c的版本。
如果系统不是 v 2 . 7 . 2 . 3,在下面的操作步骤中采用你的 g c c版本号替换v.2.7.2.3。
6 cp which gcc /usr/bin/gcc-2.7.2.3 如果需要,把现有的 g c c备份,以便以后使用。
L i n u x的另一个优点是可以很容易在目录下存储一个程序的多个版本。
7 httpd -v 8 计计
PHP3 程序设计 下载 确定系统中的 A p a c h e的版本号。
如果系统中的 A p a c h e不是v 1 . 3 . 4,在下面的操作步骤中使用你的版本号替换 v1.3.4。
8 mv which httpd /usr/sbin/httpd-1.3.4 如果需要,把现有的 Apache备份,以便以后使用。
2.3 编译C编译器gcc 使用者应该安装、编译的第一个程序就是 C编译器。
随 Red Hat v5.2附带的C编译器是 g c cv2.7.2.3,由于它的版本比较低,以至于不能正确地编译
PHP,然而gcc v.2.7.2.3可以用来编译版本较高的 gcc v2.8.1。
编译新版本的gcc需要执行: 1 cd /usr/local/src/gcc-2.8.1 转到gcc的顶级目录下。
2 ./configure— prefix/usr/local/gcc 运行配置程序,强制安装程序在后面的安装过程中使用 /usr/local/gcc作为gcc的安装目录。
3 make bootstrap LANGUAGESquotc cquot BOOT_CFLAGSquot-g -02quot 编译新的C和C编译器。
4 make install LANGUAGESquotc cquot BOOT_CFLAGSquot-g -02quot 安装新的C和C编译器。
5 mv /usr/local/gcc/bin/gcc /usr/local/gcc/bin/gcc-2.8.1 把新的gcc编译器重新命名,使它的名字中含有版本号。
6 ln -s /usr/local/gcc/bin/gcc-2.8.1 /usr/bin/gcc- 给新编译过的gcc可执行文件创建一个符号连接 /usr/bin/gcc。
7 gcc -v 显示gcc的版本号。
如果编译和安装都正常的话,将显示 v 2.8.1。
2.4 编译MySQL 现在来编译 MySQL。
在编译工作完成之后,就可以使用 MySQL的应用程序来测试安装。
1 cd /usr/local/src/mysql-3.22.16a-gamma 转到MySQL的顶级目录下。
2 ./configure --prefix/usr/local/mysql 运行配置程序,强制安装程序在后面的安装过程中使用 / u s r / l o c a l / m y s q l作为M y S Q L的安装目录。
3 make 编译MySQL。
4 make install 安装MySQL。
5 echo quot/usr/local/mysql/lib/mysqlquot gtgt /etc/ld.so.conf 下载 第 2章 安装
PHP计计 9 将MySQL库所在的目录添加进配置文件中。
这样,当 Linux启动或者执行ldconfig命令时,将会在该配置文件中的目录里搜索库文件。
6 ldconfig -v grep libmysqlclient l d c o n f i g命令能读取 / e t c / l d . s o . c o n f文件中列出的目录,并对在那些目录里找到的库文件进行缓冲。
grep命令在ldconfig命令的大量输出结果中查找 MySQL库文件,并限定文本以类似下面的方式进行显示: libmysqlclient.so.6 gt libmysqlclient.so.6.o.o. 7 echo quot/usr/local/mysql/bin/safe_mysqld gt /dev/null ampquot gtgt /etc/rc.d/rc.local 将M y S Q L启动指令添加到 / e t c / r c . d / r c . l o c a l文件中,这样每次启动 L i n u x后就会自动运行MySQL。
8 ./scripts/mysql_install_db 初始化数据库。
9 /usr/local/mysql/bin/safe_mysqld gt /dev/null amp 启动MySQL服务器作为后台程序,为了测试安装, MySQL服务器必须启动。
10 ln -s /usr/local/mysql/bin/mysql .