进入php网站
http://php.net/releases/
http://museum.php.net/php5/ 这里有全部的php版本,需要哪个下载哪个
下载5.2.17 这个版本:
http://museum.php.net/php5/php-5.2.17.tar.gz
wget http://museum.php.net/php5/php-5.2.17.tar.gz
下载5.3.28 这个版本:
http://cn2.php.net/get/php-5.3.28.tar.gz/from/this/mirror
wget http://cn2.php.net/get/php-5.3.28.tar.gz/from/this/mirror
下载5.4.7这个版本:
http://museum.php.net/php5/php-5.4.7.tar.gz
wget http://museum.php.net/php5/php-5.4.7.tar.gz
下载-5.5.17这个版本:
http://tw1.php.net/get/php-5.5.17.tar.gz/from/this/mirror
wget http://tw1.php.net/get/php-5.5.17.tar.gz/from/this/mirror
下载-5.6.17这个版本:
http://cn2.php.net/get/php-5.6.17.tar.gz/from/this/mirror
wget http://cn2.php.net/get/php-5.6.17.tar.gz/from/this/mirror
下载7.0.1这个版本:
http://cn2.php.net/get/php-7.0.1.tar.gz/from/this/mirror
wget http://cn2.php.net/get/php-7.0.1.tar.gz/from/this/mirror
安装php必须的包
执行下面这个
yum -y install gcc pcre gcc-c++ pcre-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers libcurl-devel libmcrypt-devel
或执行:
yum install -y libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-devel libcurl-devel libmcrypt-devel
新建运行php-fpm的用户
groupadd -r php-fpm
useradd -g php-fpm -r -s /sbin/nologin php-fpm
在安装php的时候,编译时需要指定mysql的路径,所以,先把mysql安装上。
安装mysql 访问
原生安装 :http://www.xiaosongit.com/index.php/Index/detail/id/63.html
yum安装:http://www.xiaosongit.com/index.php/Index/detail/id/52.html
部署5.2.17
下载5.2.17php的版本,然后解压。
tar -xf php-5.2.17.tar.gz
php5.2是没有fpm插件的,需要安装:
php5.2.17 必须安装这个补丁包。
打补丁:
gzip -cd php-5.2.17-fpm.diff.gz|patch -d php-5.2.17 -p1
Linux安装PHP ,make 的时候报错:
make: *** [ext/dom/node.lo] Error 1
解决方法:
$ curl -o php-5.2.17.patch https://mail.gnome.org/archives/xml/2012-August/txtbgxGXAvz4N.txt
$ cd php-5.2.17
$ patch -p0 -b <./php-5.2.17.patch
patching file ext/dom/node.c
patching file
ext/dom/documenttype.c
patching file ext/simplexml/simplexml.c
PS: 下载一个 php-5.2.17.patch 这个文件,
然后进入 php5.2.17这个目录中,执行 patch -p0 -b <./php-5.2.17.patch 执行完毕后,然后重新 make 进行编译 make install
安装 libmcrypt 这是必须要安装的,否则会报 reinstall libmcrypt 这样的错误。
rz libmcrypt-2.5.7.tar.gz 上传一个文件
tar -xf libmcrypt-2.5.7.tar.gz #解压文件
cd libmcrypt-2.5.7 #进入这个目录
./configure #检测
make #编译
make install #安装
安装完毕以上两步后,再次执行:下面代码
./configure --prefix=/usr/local/php/php5.2.17 --with-config-file-path=/usr/local/php/php5.2.17/etc --with-mysql=/usr/bin/mysql --with-iconv-dir --disable-fileinfo --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-magic-quotes --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --with-mime-magic --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr/bin/mysql
如果你安装了我上面介绍的mysql5.5,那就这个编译
./configure --prefix=/usr/local/php/php5.2.17 --with-config-file-path=/usr/local/php/php5.2.17/etc --with-mysql=/usr/local/mysql5.5 --with-iconv-dir --disable-fileinfo --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-magic-quotes --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --with-mime-magic --with-mysqli=/usr/local/mysql5.5/bin/mysql_config --with-pdo-mysql=/usr/local/mysql5.5
----说明: 这是每一个版本都需要配置---------------------分割线-----------------------------------
这个位置是帮助找到mysql的安装目录的方法,如果知道mysql的安装目录,这里不需要理会,直接跳过
--with-mysql=/usr/bin/mysql
--with-mysqli=/usr/bin/mysql_config
--with-pdo-mysql=/usr/bin/mysql
这是mysql的安装路径,这个怎么查找呢?
方法如下:
# rpm -q mysql
mysql-5.1.73-5.el6_7.1.i686
# rpm -ql mysql-5.1.73-5.el6_7.1.i686
-------------------------------分割线-----------------------------------
到这里证明你的 ./configure 是没有问题的。
那么紧接着就是
make
make install
然后看这里:
进入# cd /usr/local/php/php5.2.17/etc
vim php-fpm.conf
改成
:x 保存退出
启动php-fpm进程
进入 # cd /usr/local/php/php5.2.17/sbin/
执行 ./php-fpm start
出现这个提示证明运行成功
======如果没有启动成功,看看这里能不能帮你解决========启动成功后,直接跳过=======
启动 ./php-fpm start 时报错:mysql5.5
Starting php_fpm /usr/local/php/php5.2.17/bin/php-cgi: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory failed
这可能是因为你安装的是mysql5.5,因为mysql5.5 的lib路径跟以前版本不一样,所以你可以执行以下指令 echo "/usr/local/mysql5.5/lib" >> /etc/ld.so.conf ldconfig #重新加载 或 vim /etc/ld.so.conf 在这个文件中,加上 /usr/local/mysql5.5/lib ldconfig #重新加载 然后在重新启动php-fpm
=======================================
编译安装php时遇到virtual memory exhausted: Cannot allocate memory
内存不足,才会出现这个提醒,那么我们在.configure 这里面,加上 --disable-fileinfo 这样就不会提醒内存不足了。
netstat -ntlp 查看是否有进程在运行
这样还不能访问php文件,还需要修改nginx的配置文件 nginx.conf
找到: /usr/local/nginx/conf/nginx.conf
vim /usr/local/nginx/conf/nginx.conf
结束掉所有的nginx进程: killall nginx
然后重新启动:
[root@bogon sbin]# pwd
/usr/local/nginx/sbin
[root@bogon sbin]# ll
total 2788
-rwxr-xr-x. 1 root root 2854049 May 11 19:10 nginx
[root@bogon sbin]# killall nginx
[root@bogon sbin]# ./nginx
复制一个配置文件,放在 /usr/local/php/php5.2.17/etc/ 这个目录下
这是php的配置文件 php.ini
cp php.ini-dist /usr/local/php/php5.2.17/etc/php.ini
vim /usr/local/php/php5.2.17/etc/php.ini
打开配置文件,然后
然后在最下面添加上时区:
date.timezone="Asia/Shanghai"
把时区添加上。
post_max_size=8M 最大上传为8M
upload_max_filesize = 8M
访问:192.168.1.139/a.php
单个版本可以访问了。
下面再次部署5.3.28
解压文件:
tar -xf php-5.3.28.tar.gz
进入目录
cd php-5.3.28
执行下面命令:
./configure --prefix=/usr/local/php/php5.3.28 --with-config-file-path=/usr/local/php/php5.3.28/etc --with-mysql=/usr/bin/mysql --with-iconv-dir --disable-fileinfo --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-magic-quotes --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --with-mime-magic --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr/bin/mysql
红字部分,根据数据库安装的位置去填写路径。切记路径要正确。
编译成功后,执行
make
make install
php5.3.28 安装成功完毕后,是不能直接执行的,需要进入etc目录下,
复制 php-fpm.conf.default 改名 php-fpm.conf ,并编辑这个文件。
# cp php-fpm.conf.default php-fpm.conf
# ll
total 48
-rw-r--r--. 1 root root 21701 May 11 23:10 php-fpm.conf
-rw-r--r--. 1 root root 21701 May 11 23:09 php-fpm.conf.default
# vim php-fpm.conf
cp php.ini-development /usr/local/php/php5.3.28/etc/php.ini
根据需求,去配置php.ini
打开配置文件,然后
然后在最下面添加上时区:
date.timezone="Asia/Shanghai"
把时区添加上。
post_max_size=8M 最大上传为8M
upload_max_filesize = 8M
然后进入sbin目录,并执行 ./php-fpm
下面再次部署5.4.7
进入:php-5.4.7 文件夹
./configure --prefix=/usr/local/php/php5.4.7 --with-config-file-path=/usr/local/php/php5.4.7/etc --with-mysql=/usr --with-iconv-dir --disable-fileinfo --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr/bin/mysql
红字部分,根据数据库安装的位置去填写路径。切记路径要正确。
不要理会,比5.3 要去掉的配置
configure: WARNING: unrecognized options: --enable-discard-path, --enable-magic-quotes, --enable-fastcgi, --enable-force-cgi-redirect, --with-mime-magic
# make
make install
现在还不能启动,需要设置一下配置文件
进入目录 /usr/local/php/php.5.4.7/etc/
cp php-fpm.conf.default php-fpm.conf
vim php-fpm.conf
找到:
user = nobody
group = nobody
改成:
user = php-fpm
group = php-fpm
另外,我将php5.4.7设置成了 9002 端口
然后
:wq
保存退出。
这是php的配置文件 php.ini
cp php.ini-dist /usr/local/php/php5.4.7/etc/php.ini
vim /usr/local/php/php5.2.17/etc/php.ini
打开配置文件,然后
然后在最下面添加上时区:
date.timezone="Asia/Shanghai"
把时区添加上。
post_max_size=8M 最大上传为8M
upload_max_filesize = 8M
进入 /usr/local/php/php.5.4.7/sbin/
没有报错,证明启动成功
需要修改一下nginx配置文件,
把这个配置文件,改成9002 这个端口,
每一个站点都有一个server,需要用不同的php版本时候,这里就监听不同的端口,就可以了
:x 保存退出
重新启动nginx服务。
[root@bogon sbin]# ll
total 2788
-rwxr-xr-x. 1 root root 2854049 May 11 19:10 nginx
[root@bogon sbin]# pwd
/usr/local/nginx/sbin
[root@bogon sbin]# ll
total 2788
-rwxr-xr-x. 1 root root 2854049 May 11 19:10 nginx
[root@bogon sbin]# killall nginx
[root@bogon sbin]# ./nginx
打开 192.168.1.139/a.php
重新启动一下试试看。
下面再次部署5.5.17
./configure --prefix=/usr/local/php/php5.5.17 --with-config-file-path=/usr/local/php/php5.5.17/etc --with-mysql=/usr --with-iconv-dir --disable-fileinfo --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --with-mysqli=/usr/bin/mysql_config --with-pdo-mysql=/usr/bin/mysql --enable-opcache=no
这个红色需要根据实际的业务逻辑去写。
make
make install
php5.5.17 安装成功
同理、需要配置php-fpm.conf 这个文件
# cd /usr/local/php/php5.5.17/etc
# cp php-fpm.conf.default php-fpm.conf
# vim php-fpm.conf
:x 或 :wq 保存退出
配置nginx 看一下效果
[root@bogon sbin]# ll
total 2788
-rwxr-xr-x. 1 root root 2854049 May 11 19:10 nginx
[root@bogon sbin]# pwd
/usr/local/nginx/sbin
[root@bogon sbin]# ll
total 2788
-rwxr-xr-x. 1 root root 2854049 May 11 19:10 nginx
[root@bogon sbin]# killall nginx
[root@bogon sbin]# ./nginx
打开 192.168.1.139/a.php
至此,php5.5.17这个版本也已经搭建好了。
其实多版本就是使用php-fpm 监听多个端口
每一个网站配置成不同的端口即可。
===============下面是部署的时候出现的错误内容,解决办法===============
问题汇总:
collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1
处理方法:
./configure …………
vi Makefile
找到下面这行:
EXTRA_LIBS = -lcrypt ...
在最后添加-liconv
configure: error: xml2-config not found. Please check your libxml2 installation.
[root@rh-linux /]# yum install -y libxml2 libxml2-devel
安装完之后查找xml2-config文件是否存在
[root@rh-linux /] # find / -name "xml2-config"
/usr/bin/xml2-config
configure: error: Please reinstall the BZip2 distribution
yum install -y bzip2 bzip2-devel
checking for cURL in default path... not found
configure: error: Please reinstall the libcurl distribution -
easy.h should be in <curl-dir>/include/curl/
yum -y install curl-devel
configure: error: libjpeg.(a|so) not found.
yum install -y libjpeg-devel
yum install -y libpng-devel
检查之后发现已经安装了libjpeg,但是在/usr/lib目录下没有libjpeg.so这个文件,在/usr/lib64下是有的,
虽然使用–with-jpeg-dir=/usr/lib64 依然无效,最后用
#ln -s /usr/lib64/libjpeg.so /usr/lib/libjpeg.so
#ln -s /usr/lib64/libpng.so /usr/lib/libpng.so
configure: error: mcrypt.h not found. Please reinstall libmcrypt
#使用wget可以通过以下路径下载
wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz
#解压
tar -zxvf libmcrypt-2.5.7.tar.gz
#进入目录
cd libmcrypt-2.5.7
./configure
make && make install
进行安装完毕,查看mcrypt.h 是否存在?
使用 find / -name 'mcrypt.h' ; 看看目录所在的位置
configure: error: Please reinstall libmhash - I cannot find mhash.h
安装mhash
#tar -zxvf mhash-0.9.9.9.tar.gz
#cd mhash-0.9.9.9
#./configure
#make
#make install