PHP笔记-Apache2+PHP5编译安装

作者:聂勇 欢迎转载,请保留作者信息并说明文章来源!

PHP原本简称为Personal Home Page,由Rasmus Lerdorf于1995年发明。1997年,由两个以色列程序员:Zeev Suraski和Andi Gutmans,重写了PHP的剖析器,成为PHP 3的基础,而PHP也在这个时候改称为PHP: Hypertext Preprocessor。

PHP语法参考了C、Perl,是一种在服务端执行的嵌入HTML标签的脚本语言。适合于快速开发WEB应用程序,且在执行速度方面也比较理想,并且可以调用C编写的扩展模块。

用Java开发 WEB应用已经有7年的时间,前段时间领略了用Python开发测试程序和数据处理脚本的快速。接下来新的工作中会使用PHP开发产品,抽点时间搭建一下PHP的运行环境。

一、安装准备

二、编译安装Apache2

1、解压缩Apache2源代码包。

1
2
3
gunzip httpd-2.2.19.tar.gz
tar -xvf httpd-2.2.19.tar
cd httpd-2.2.1

2、编译安装三步曲。

1
2
3
./configure --enable-so --prefix=/devdata/c_tool/apache-httpd-2.2.19
make
make install

说明:

  • –enable-so 支持*.so扩展插件为Apache提供新的功能。由于后面是提供libphp5.so扩展模块来让Apache处理php,所以–enable-so是必须的。
  • –prefix 指定安装路径。

三、编译安装PHP5

1、编译安装libxml。 (可选)
1)解压缩libxml。

1
2
3
gunzip libxml2-2.7.8.tar.gz
tar -xvf libxml2-2.7.8.tar
cd libxml2-2.7.8

2)编译安装三步曲。

1
2
3
./configure --prefix=/devdata/c_tool/libxml2-2.7.8
make
make install

2、编译安装zlib。(可选)

1)解压缩zlib。

1
2
3
gunzip zlib-1.2.5.tar.gz
tar -xvf zlib-1.2.5.tar
cd zlib-1.2.5

2)编译安装三步曲。

1
2
3
./configure --prefix=/devdata/c_tool/zlib-1.2.5
make test
make install

3、编译安装freetype。(可选)

1)解压缩freetype。

1
2
3
gunzip freetype-2.4.5.tar.gz
tar -xvf freetype-2.4.5.tar
cd freetype-2.4.5

2)编译安装三步曲。

1
2
3
./configure --prefix=/devdata/c_tool/freetype-2.4.5
make
sudo make install (as root)

4、编译安装jpeg。(可选)
1)解压缩jpeg。

1
2
3
gunzip jpegsrc.v8c.tar.gz
tar -xvf jpegsrc.v8c.tar
cd jpeg-8c

2)编译安装三步曲。

1
2
3
./configure --prefix=/devdata/c_tool/jpeg-8c
make
make install

5、编译安装libpng。(可选)
1)解压缩libpng。

1
2
3
gunzip libpng-1.5.2.tar.gz
tar -xvf libpng-1.5.2.tar
cd libpng-1.5.2

2)编译安装三步曲。

1
2
3
./configure --prefix=/devdata/c_tool/libpng-1.5.2
make check
make install

6、编译安装gd。(可选)
1)解压缩gd。

1
2
3
gunzip gd-2.0.35.tar.gz
tar -xvf gd-2.0.35.tar
cd gd/2.0.35

2)编译安装三步曲。

1
2
3
./configure --prefix=/devdata/c_tool/gd-2.0.35 --with-png=/devdata/c_tool/libpng-1.5.2 --with-freetype=/devdata/c_tool/freetype-2.4.5 --with-jpeg=/devdata/c_tool/jpeg-8c
make
make install

说明:

  • –with-png 指定编译安装libpng指定的prefix目录。
  • –with-freetype 指定编译安装freetype指定的prefix目录。
  • –with-jpeg 指定编译安装jpeg指定的prefix目录。

7、编译安装PHP5。
1)解压缩PHP5。

1
2
tar -xvf php-5.3.6.tar
cd php-5.3.6

2)编译安装三步曲。

1
2
3
4
./configure --prefix=/devdata/c_tool/php-5.3.6 --with-openssl --with-mysql --enable-zip --enable-sockets --enable-soap --enable-sqlite-utf8 --with-apxs2=/devdata/c_tool/apache-httpd-2.2.19/bin/apxs --with-libxml-dir=/devdata/c_tool/libxml2-2.7.8 --with-zlib-dir=/devdata/c_tool/zlib-1.2.5 --with-jpeg-dir=/devdata/c_tool/jpeg-8c --with-png-dir=/devdata/c_tool/libpng-1.5.2 --with-freetype-dir=/devdata/c_tool/freetype-2.4.5 --with-gd=/devdata/c_tool/gd-2.0.35
make
make test
make install

说明:

  1. configure配置参数说明:
  • –with-openssl 前提必须是已经安装了openssl且版本>=0.9.6,否则去掉此选项。
  • –with-mysql 前提必须是已经安装了mysql客户端,否则去掉此选项。
  • –with-libxml-dir 前提必须是已经安装了libxml,否则去掉此选项。
  • –with-zlib-dir 前提必须是已经安装了zlib,否则去掉此选项。
  • –with-jpeg-dir 前提必须是已经安装了jpeg,否则去掉此选项。
  • –with-png-dir 前提必须是已经安装了libpng,否则去掉此选项。
  • –with-freetype-dir 前提必须是已经安装了freetype,否则去掉此选项。
  • –with-gd 前提必须是已经安装了gd,否则去掉此选项。
  1. 如果在执行configure后出现以下内容,表示成功:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +--------------------------------------------------------------------+
    | License: |
    | This software is subject to the PHP License, available in this |
    | distribution in the file LICENSE. By continuing this installation |
    | process, you are bound by the terms of this license agreement. |
    | If you do not agree with the terms of this license, you must abort |
    | the installation process at this point. |
    +--------------------------------------------------------------------+
    Thank you for using PHP.
  2. make install会出现类似如下的输出,注意其中的加粗部分有助于了解make install的时候做了什么以及后续该如何处理。

    Installing PHP SAPI module: apache2handler
    /devdata/c_tool/apache-httpd-2.2.19/build/instdso.sh SH_LIBTOOL=’/devdata/c_tool/apache-httpd-2.2.19/build/libtool’ libphp5.la /devdata/c_tool/apache-httpd-2.2.19/modules
    /devdata/c_tool/apache-httpd-2.2.19/build/libtool –mode=install cp libphp5.la /devdata/c_tool/apache-httpd-2.2.19/modules/
    cp .libs/libphp5.so /devdata/c_tool/apache-httpd-2.2.19/modules/libphp5.so
    cp .libs/libphp5.lai /devdata/c_tool/apache-httpd-2.2.19/modules/libphp5.la
    libtool: install: warning: remember to run libtool --finish /devdata/c_tool/install-src/php-5.3.6/libs' chmod 755 /devdata/c_tool/apache-httpd-2.2.19/modules/libphp5.so [activating modulephp5’ in /devdata/c_tool/apache-httpd-2.2.19/conf/httpd.conf]
    Installing PHP CLI binary: /devdata/c_tool/php-5.3.6/bin/
    Installing PHP CLI man page: /devdata/c_tool/php-5.3.6/man/man1/
    Installing build environment: /devdata/c_tool/php-5.3.6/lib/php/build/
    Installing header files: /devdata/c_tool/php-5.3.6/include/php/
    Installing helper programs: /devdata/c_tool/php-5.3.6/bin/
    program: phpize
    program: php-config
    Installing man pages: /devdata/c_tool/php-5.3.6/man/man1/
    page: phpize.1
    page: php-config.1
    Installing PEAR environment: /devdata/c_tool/php-5.3.6/lib/php/
    [PEAR] Archive_Tar - installed: 1.3.7
    [PEAR] Console_Getopt - installed: 1.3.0
    [PEAR] Structures_Graph- installed: 1.0.4
    [PEAR] XML_Util - installed: 1.2.1
    [PEAR] PEAR - installed: 1.9.2
    Wrote PEAR system config file at: /devdata/c_tool/php-5.3.6/etc/pear.conf
    You may want to add: /devdata/c_tool/php-5.3.6/lib/php to your php.ini include_path
    /devdata/c_tool/install-src/php-5.3.6/build/shtool install -c ext/phar/phar.phar /devdata/c_tool/php-5.3.6/bin
    ln -s -f /devdata/c_tool/php-5.3.6/bin/phar.phar /devdata/c_tool/php-5.3.6/bin/phar
    Installing PDO headers: /devdata/c_tool/php-5.3.6/include/php/ext/pdo/

四、配置Apache2支持PHP解析

1、复制PHP配置文件。

1
cp php.ini-development /devdata/c_tool/php-5.3.6/lib/php/php.ini

说明:

  • php.ini-development位于php-5.3.6.tar解压后的目录中。

2、修改Apache2的配置文件httpd.conf,增加如下内容:

1
2
3
4
5
LoadModule php5_module modules/libphp5.so (此部分内容在编译php5执行make install的时候已经自动加入,如果没有需手动添加)
<FilesMatch \.php>
SetHandler application/x-httpd-php
</FilesMatch>

五、测试

1、启动Apache2。

1
sudo httpd -k start

2、编写一个helloworld.php放入Apache2的htdocs目录,其源代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
  <head>
  </head>
  <body>
  <?
  echo "Hello, World!";
  echo "<br/>";
  date_default_timezone_set("PRC");
  $now = getdate();
  echo "现在是:".$now[year]."年".$now[mon]."月".$now[mday]."日 ".$now[hours]."时".$now[minutes]."分".$now[seconds]."秒";
  ?>
  </body>
</html>

3、打开浏览器,显示内容如下图所示:
PHP HelloWorld

六、编译安装过程中的错误处理

1、编译安装gd时,configure报错:

gd_png.c:16: fatal error: png.h: No such file or directory
compilation terminated.
make[2]: [gd_png.lo] 错误 1
make[2]:正在离开目录 `/devdata/c_tool/install-src/gd/2.0.35’
make[1]:
[all-recursive] 错误 1
make[1]:正在离开目录 `/devdata/c_tool/install-src/gd/2.0.35’
make: * [all] 错误 2

解决方法:修改gd的源代码,找到gd_png.c 将include “png.h” 中的png.h改成具体的路径。

2、编译安装PHP5时,configure报错:

configure: error: Cannot find MySQL header files under yes.
Note that the MySQL client library is not bundled anymore!

解决方法:安装mysqlclient-dev包,在ubuntu下可以执行如下命令安装mysqlclient-dev包:

1
sudo apt-get install libmysqlclient-dev

参考资料 | References