半夜ATM机前看书的那位

导航

在Ubuntu下编译和安装PHP 5.2

在Ubuntu下开始编译和安装PHP之前,首先要安装一下软件包
1、flex
sudo apt-get install flex
2、apache2-threaded-dev
sudo apt-get install apache2-threaded-dev
安装之后,可以在一下位置找到安装的内容
如故是apache2
/usr/bin/apxs2
如果是apache1
/usr/bin/apxs
3、libxml2-dev
sudo apt-get install libxml2-dev
在安装好以上软件之后,需要修改一下httpd.conf
在httpd.conf中增加点虚假的内容
例如:
# Dummy LoadModule directive to aid module installations
# LoadModule dummy_module /usr/lib/apache2/modules/mod_dummy.so
因为如果httpd.conf内容为空的话
安装PHP会出错。
cd php-5.2.9
./configure --prefix=/usr/local/php --enable-fastcgi --enable-force-cgi-redirect --with-config-file-path=/usr/local/php/etc --disable-ipv6 --enable-libxml --with-gd --enable-gd-native-ttf --with-mysql=/usr/lib/mysql/lib --with-mysqli=/usr/bin/mysql_config --enable-xml --with-freetype-dir --with-jpeg-dir --with-png-dir --with-ttf=shared --enable-static --with-zlib-dir --with-ttf --enable-mbstring --with-mcrypt --enable-sockets --with-gettext --with-mysql-sock=/var/run/mysqld/mysqld.sock --enable-ftp --with-pdo-mysql --enable-sqlite-utf8 --enable-zip --enable-exif --with-curl
make
sudo make install
sudo cp php.ini-recommended /usr/local/php/etc/php.ini
开始编译和安装PHP
1、解压
$ tar zxvf php-5.2.8.tar.gz
2、查看可以用的编译参数
$ ./configure -help
3、现来个就基本的安装,除了支持apache2以外,其他的都不管。以后使用过程中遇到其他问题,再修改编译参数,逐个处理。
其中
--prefix用来指定安装目录
--with-apxs2用来指定apxs2的位置。
./configure --prefix=/usr/local/php --with-apxs2=/usr/bin/apxs2
2、编译
make
3、编译测试
make test
3、安装
sudo make install
修改httpd.conf
增加以下内容
AddType application/x-httpd-php .php .phtml
AddType application/x-httpd-php-source .phps
在/var/www/中添加index.php
<?php
echo phpinfo();
?>
重新启动apache
sudo apache2ctl -k restart
用浏览器访问127.0.0.1/index.php
 
==============
Compiling PHP 5.2.9 on Ubuntu
tar -xjf php-5.2.9.tar.bz2
cd php-5.2.9
apt-get install php5-dev libmysqlclient15-dev bzip2 libcurl3 curl libpng12-dev libfreetype6-dev libmcrypt4 libmcrypt-dev libmhash2 libmhash-dev libxml2-dev libxslt1-dev apache2-prefork-dev libjpeg62-dev freetype2 libxft libxft-dev libcurl4-gnutls-dev libmcrypt4
./configure --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php5/apache2/ --with-mysql --enable-inline-optimization --disable-debug --enable-bcmath --enable-calendar --enable-ctype --enable-dbase --enable-discard-path --enable-exif --enable-force-cgi-redirect --enable-ftp --enable-gd-native-ttf --with-ttf --enable-shmop --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-wddx --with-zlib=yes --with-openssl --with-xsl --with-gd --with-gettext --with-mcrypt --with-mhash --enable-sockets --enable-mbstring=all --enable-mbregex --enable-zend-multibyte --enable-exif --enable-soap --enable-pcntl --with-mysqli --with-mime-magic --with-iconv --with-pdo-mysql --with-freetype-dir=/usr/include/freetype2/freetype
make
make install
The above worked on Intrepid, below is an example that worked on Dapper. Here I have compiled as static libraries and put them in the /usr/local/lib dir:
tar -xjf php-5.2.9.tar.bz2
cd php-5.2.9
apt-get install make php5-dev libmysqlclient15-dev bzip2 libcurl3 curl libpng12-dev libfreetype6-dev libmhash2 libmhash-dev libxml2-dev libxslt1-dev apache2-prefork-dev libjpeg62-dev freetype2 libxft libxft-dev libcurl3-gnutls-dev libjpeg* libpng* libmcrypt*
./configure --with-apxs2=/usr/bin/apxs2 --with-config-file-path=/etc/php5/apache2 --with-mysql --enable-inline-optimization --disable-debug --enable-bcmath --enable-calendar --enable-ctype --enable-dbase --enable-discard-path --enable-exif --enable-force-cgi-redirect --enable-ftp --enable-gd-native-ttf --with-ttf --enable-shmop --enable-sigchild --enable-sysvsem --enable-sysvshm --enable-wddx --with-zlib=yes --with-openssl --with-xsl --with-gd --with-freetype-dir=/usr/local/lib --with-jpeg-dir --with-png-dir --with-gettext --with-mhash --enable-sockets --enable-mbstring=all --enable-mbregex --enable-zend-multibyte --enable-exif --enable-soap --enable-pcntl --with-mysqli --with-mime-magic --with-iconv --with-pdo-mysql --with-curl
make
apt-get --purge remove php5
make install
Note the use of that apt-get remove statement, before I ran it the gd library would not work for some strange reason, even though it worked with the prior version of php. Very strange and probably due to some kind of configuration problem that was resolved once I removed the default php installation completely.
Update: I just had problems with GD2 in Dapper, I got: Fatal error: Call to undefined function imagecreatefromjpeg(). That has now been taken care of by including all possible jpeg libraries in the apt-get line, ie libjpeg*, I’ve also got –with-jpeg-dir, notice the lack of an explicit directory there. The above lines have been changed to reflect this.
 
最简单的编译php的方法如下(编译时间约需6分钟):
./configure --with-apxs2=/usr/local/apache2/bin/apxs \
            --with-mysql-sock=/tmp/mysql.sock \
            --with-mysql &&make &&make install
没错,就是这么简单,php就被编译完成。接下来我们需要拷贝php的配置文件,默认php.ini的位置在php安装目录下的lib子目录中。
cp php.ini-dist /usr/local/lib/php.ini
关于扩展模块:以上的编译方法仅包含主要的php模块,大部分的php自带的模块并没有被编译,如果以后需要使用这些模块,你可以手动编译他们,以curl模块为例:
cd ext/curl/
/usr/local/bin/phpize
./configure –with-php-config=/usr/local/bin/php-config
make install
编译好的curl.so默认安装到/usr/local/lib/php/extensions/no-debug-zts-20060613/目录下,你可以编译php.ini,加入:
extension="/usr/local/lib/php/extensions/no-debug-zts-20060613/curl.so"
就可以使用curl。不过由于 usr/local/lib/php/extensions/no-debug-zts-20060613这个目录不是php寻找模块的默认目录,因此,每手工添加一个模块,都要重复输入那一长串的路径,解决方法为,编辑php.ini,找到extension_dir = "./"一行,将其修改为:
extension_dir = "/usr/local/lib/php/extensions/no-debug-zts-20060613/"
这样,以后再自行编译模块,只需要修改php.ini加入:extension = curl.so,即可。
接下来删掉libphp5.so中的调试符号:
cd /usr/local/apache2/modules/
cp libphp5.so libphp5.old &&strip libphp5.so
编辑php.ini:
cd /usr/local/lib &&vi php.ini
你需要对php进行简单的配置,有关配置的详细信息请参考php手册:
error_log = /usr/local/php/php_error.log
date.timezone = "Asia/Shanghai"
session.save_path = "/tmp"
最后,我们需要编辑apache的配置文件,最终整合apache+mysql+php的运行环境。
vi /usr/local/apache2/conf/httpd.conf
在一长串的LoadModule行的最后,可以找到
LoadModule php5_module        modules/libphp5.so
这表明apache现在已经集成了对php的支持,不过目前,apache还不“认识”.php扩展名的文件,如果通过浏览器请求.php扩展名的文件,那么apache会返回该文件的源代码。解决方法为,在Load php Module这一行的下面,加入:
<IfModule !mod_php5.c>
    LoadModule php5_module lib/modules/libphp5.so
</IfModule>
<IfModule mod_php5.c>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php .php5
    AddType application/x-httpd-php-source .phps
    AddType application/x-httpd-php-source .php5s
    DirectoryIndex index.php
    DirectoryIndex index.php5
</IfModule>
这样,apache就可以解析php文件了。请注意这几行中后面的部分,小数点后面的是扩展名,如果你的php程序是以 .php 结尾的,那么一定要有
    AddType application/x-httpd-php .php
这一行,如果你的php程序是以其它的扩展名结尾的,如 .php5 ,那么一定要有
    AddType application/x-httpd-php .php5
这一行,其它你不需要的行,尽管可以放心删除,用到时再添加。至于phps行,指令明确表明是php源代码(php-source),如果你有php源文件需要放在网上共享,请将其存为 .phps 扩展名,或其它你在配置文件中指定的扩展名。
接下来,我们继续编辑httpd.conf文件,记得我们之前编译apache时采用的所有模块的共享编译的方法吗?这种方法的好处是,你可以立刻获得所有的apache自带的模块,不过弊端也很明显,那就是现在在配置文件中,所有的模块都默认载入了,有些模块是我们不需要的,而有些模块是必须配置才能起作用的,所以,现有我们需要先暂时关闭不用的模块,方法为,在相应的LoadModule模块前加#把该行注释掉。关于模块的加载请参考apache的手册有关章节,再根据你实际的情况进行配置。
注意:有些基本模块提供了必要的httpd.conf中的配置项,关闭他们会使apache运行错误。
使用下面的命令屏蔽不常用的模块,这个命令主要禁止一些扩展模块和实验模块的加载,这些模块并没有经过长时间的测试,因些可能会带来潜在的风险。并且,个别模块的需要配置才能工作,并且配置项并没有包含在httpd.conf文件中,如果你确实需要使用某些模块,请参考去掉相应的行,一个模块一行,有些模块需要配合其它的模块才能正常工作,关于这些模块的介绍,请参考apache手册。
sed -i "s/^LoadModule authn_anon_module/# &/" httpd.conf &&
sed -i "s/^LoadModule authn_dbd_module/# &/" httpd.conf &&
sed -i "s/^LoadModule authn_dbm_module/# &/" httpd.conf &&
sed -i "s/^LoadModule authz_dbm_module/# &/" httpd.conf &&
sed -i "s/^LoadModule authz_owner_module/# &/" httpd.conf &&
sed -i "s/^LoadModule cern_meta_module/# &/" httpd.conf &&
sed -i "s/^LoadModule dav_module/# &/" httpd.conf &&
sed -i "s/^LoadModule dav_fs_module/# &/" httpd.conf &&
sed -i "s/^LoadModule dbd_module/# &/" httpd.conf &&
sed -i "s/^LoadModule deflate_module/# &/" httpd.conf &&
sed -i "s/^LoadModule dumpio_module/# &/" httpd.conf &&
sed -i "s/^LoadModule expires_module/# &/" httpd.conf &&
sed -i "s/^LoadModule ext_filter_module/# &/" httpd.conf &&
sed -i "s/^LoadModule filter_module/# &/" httpd.conf &&
sed -i "s/^LoadModule headers_module/# &/" httpd.conf &&
sed -i "s/^LoadModule ident_module/# &/" httpd.conf &&
sed -i "s/^LoadModule info_module/# &/" httpd.conf &&
sed -i "s/^LoadModule log_forensic_module/# &/" httpd.conf &&
sed -i "s/^LoadModule rewrite_module/# &/" httpd.conf &&
sed -i "s/^LoadModule speling_module/# &/" httpd.conf &&
sed -i "s/^LoadModule status_module/# &/" httpd.conf &&
sed -i "s/^LoadModule unique_id_module/# &/" httpd.conf &&
sed -i "s/^LoadModule userdir_module/# &/" httpd.conf &&
sed -i "s/^LoadModule usertrack_module/# &/" httpd.conf &&
sed -i "s/^LoadModule version_module/# &/" httpd.conf
接下来设置apache运行时的用户和组,也就是我们在apache编译开始部分添加的用户和组。
注意:所设定的用户和组必须存在,否则apache启动时会提示“bad user name XXXX ”
sed -i -e "s/User daemon/User apache/" -e "s/Group daemon/Group apache/" path_to_httpd.conf
path_to_httpd.conf指的是httpd.conf的路径,例如,你的apache编译到/usr/local/apache,那么httpd.conf可能在/usr/local/apache/conf目录下。
静态编译php:与apache和mysql不同,由于php支持几十种库和组件的连接,应用环境因人而异,编译参数也是复杂多变,本文给出的方法能够应付绝大多数的使用要求,相应的,依赖的组件也为数众多,如果不能编译成功,请检查你的环境中是否缺少必要的include和lib。
如果你此前已经编译过php,那么现在请再次进入php的源代码目录,并删掉上次的编译结果:
cd /local/localsoft/websrv/php/php-5.2.6/
make clean
执行configure 脚本,查看编译配置参数,有些模块需要系统中有特定的组件支持,为保证编译过程的顺利,请先安装他们(提示:应该安装dev或devel之类的包)。
如果你不能马上记住所有的编译参数(事实上这也不可能),那么请用文本编辑器详细记录你需要用到的编译参数。编译参数如下(编辑时间约需7分钟):
./configure --sysconfdir=/usr/local/etc \
            --with-config-file-path=/usr/local/etc \
            --with-config-file-scan-dir=/usr/local/etc/php \
            --with-apxs2=/usr/local/sbin/apxs \
            --with-mysql=/usr/local \
            --with-mysql=shared \
            --with-mysql-sock=/tmp/mysql.sock \
            --with-pdo-mysql=/usr/local \
            --with-pdo-mysql=shared \
            --with-mysqli=/usr/local/bin/mysql_config \
            --with-mysqli=shared \
            --enable-mod-charset \
            --enable-bcmath \
            --with-bz2=shared \
            --enable-calendar \
            --with-curl=shared \
            --with-curlwrappers \
            --enable-exif \
            --enable-ftp \
            --with-gdbm \
            --with-gd=shared \
            --with-jpeg-dir \
            --with-png-dir \
            --with-zlib-dir \
            --with-zlib=shared \
            --with-xpm-dir \
            --with-ttf \
            --with-freetype-dir \
            --enable-gd-native-ttf \
            --with-gettext=shared \
            --with-gmp=shared \
            --with-iconv=shared \
            --with-iconv-dir \
            --with-imap=shared \
            --with-ldap=shared \
            --enable-mbstring \
            --enable-zend-multibyte \
            --with-mcrypt=shared \
            --with-mhash=shared \
            --with-ming=shared \
            --with-ncurses=shared \
            --with-pspell=shared \
            --enable-sqlite-utf8 \
            --with-sqlite=shared \
            --with-tidy=shared \
            --with-pdo-sqlite=shared \
            --with-readline=shared \
            --enable-shmop \
            --enable-soap \
            --enable-sockets \
            --enable-sysvmsg \
            --enable-sysvsem \
            --enable-sysvshm \
            --enable-wddx \
            --with-xmlrpc=shared \
            --with-xsl=shared \
            --enable-zip \
            --enable-discard-path \
            --enable-force-cgi-redirect \
            --enable-magic-quotes \
            --enable-sigchild \
            --enable-pcntl &&make &&make install
编译参数基本是按照phpinfo的顺序进行的。因此,如果你不需要哪些功能,可以对照着去除。本编译不包括的部分功能ODBC,openssl如果你确实需要这些功能,请执行configure --help 脚本查看有关配置信息。带with参数的模块,可以通过在后面加=shared从而编译成共享模块,就像上面的—with-gd=shared那样的,如果同时需要指定路径,可以使用:
./configure --with-gd=/usr/local/gd2 --with-gd=shared
类似的参数。安装完成后,你需要安装并设置你的php.ini文件。然后重启apache。在php的源代码目录执行以下命令:
install -v -m644 php.ini-recommended /usr/local/etc/php.ini
注意:如果使用shared方式去编译某些php扩展,那么,在启动apache之前,你需要在php.ini中加入指定扩展的引用,否则该扩展不会生效。如果按上面的方法来编译php,那么就需要在php.ini中添加如下配置:
error_log = /usr/local/var/logs/php_error.log
include_path = ".:/usr/local/lib/php"
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-zts-20060613"
date.timezone = "Asia/Shanghai"
session.save_path = "/tmp"
在静态编译php的参数中,部分模块被编译成共享模块,并且没有在php.ini中载入,因此,如果你希望这些模块生效,你需要进行如下配置:
cd /usr/local/etc/
mkdir php &&cd php
现在我们的工作目录/usr/local/etc/php/   这个目录是通过—with-config-file-scan-dir参数指定的。
下面一系列的命令将把对某个扩展的引用写入到*.ini的配置文件中,每个扩展的配置分别写入单独的文件中,并使用 extension=gd.so类似的格式,这样,如果你需要临时调试某些php扩展,就可以方便的对该扩展的配置进行修改。
如果不需要使用该扩展,可以直接把该扩展对应的配置文件移走或删除。
当然,你也可以把这些配置统统写入到一个文件里。
cd /usr/local/etc/ &&mkdir php &&cd php
echo extension=bz2.so >> bz2.ini &&
echo extension=curl.so >> curl.ini &&
echo extension=gd.so >> gd.ini &&
echo extension=gettext.so >>gettext.ini &&
echo extension=gmp.so >>gmp.ini &&
echo extension=iconv.so >> iconv.ini &&
extension=imap.so >>imap.ini &&
echo extension=ldap.so >>ldap.ini &&
echo extension=mcrypt.so >> mcrypt.ini &&
echo extension=mhash.so >>mhash.ini &&
echo extension=ming.so >>ming.ini &&
echo extension=mysql.so >>mysql.ini &&
echo extension=mysqli.so >> mysqli.ini &&
echo extension=ncurses.so >>ncurses.ini &&
echo extension=pdo_mysql.so >> pdo_mysql.ini &&
echo extension=pdo_sqlite.so >> pdo_sqlite.ini &&
echo extension=pspell.so >> pspell.ini &&
echo extension=readline.so >> readline.ini &&
echo extension=sqlite.so >> sqlite.ini &&
echo extension=tidy.so >> tidy.ini &&
echo extension=xmlrpc.so >> xmlrpc.ini &&
echo extension=xsl.so >> xsl.ini &&
echo extension=zlib.so >>zlib.ini
注意:如果当前你的apache服务是运行的,那么修改配置文件后,需要重启apache服务才能生效。
现在,你的apache+mysql+php的环境安装完成了

posted on 2011-08-22 15:01  zhizhesky  阅读(1712)  评论(0编辑  收藏  举报