作为程序员一定要保持良好的睡眠,才能好编程

linux 安装php ,如何同时使用多个版本?

发布时间:2016-05-12

进入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.2.17.png


下载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.3.28.png



下载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.4.7.png



下载-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插件的,需要安装:

d25.png


php5.2.17 必须安装这个补丁包。

打补丁:

php-5.2.17-fpm.diff.gz

gzip -cd php-5.2.17-fpm.diff.gz|patch -d php-5.2.17 -p1


d2.jpg


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

c11.jpg

-------------------------------分割线-----------------------------------



C2.jpg

到这里证明你的 ./configure 是没有问题的。


那么紧接着就是 


make

C4.jpg

make install

c5.jpg



 


然后看这里:


进入# cd /usr/local/php/php5.2.17/etc

vim php-fpm.conf

d3.jpg

改成

改3.jpg

:x 保存退出


启动php-fpm进程

进入 # cd /usr/local/php/php5.2.17/sbin/

C12.jpg

执行  ./php-fpm start

c9.jpg

出现这个提示证明运行成功



======如果没有启动成功,看看这里能不能帮你解决========启动成功后,直接跳过=======

启动 ./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 查看是否有进程在运行

C13.jpg


这样还不能访问php文件,还需要修改nginx的配置文件  nginx.conf

找到:   /usr/local/nginx/conf/nginx.conf

c15.jpg

vim /usr/local/nginx/conf/nginx.conf

c16.jpg


结束掉所有的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

c17.jpg



复制一个配置文件,放在 /usr/local/php/php5.2.17/etc/ 这个目录下

1.jpg


这是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


c10.jpg




单个版本可以访问了。


下面再次部署5.3.28


解压文件:

tar -xf php-5.3.28.tar.gz

C18.jpg


进入目录

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

c21.jpg

make install

c22.jpg


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

c27.jpg

 

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

2.jpg


然后进入sbin目录,并执行 ./php-fpm

c23.jpg


c26.jpg


下面再次部署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

c33.jpg

make install

c34.jpg



现在还不能启动,需要设置一下配置文件

进入目录   /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 端口

c37.jpg然后

: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

3.jpg


进入 /usr/local/php/php.5.4.7/sbin/

c35.jpg

没有报错,证明启动成功


c36.jpg



需要修改一下nginx配置文件,

c39.jpg

c40.jpg

把这个配置文件,改成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
c41.jpg

打开 192.168.1.139/a.php

c38.jpg




重新启动一下试试看。



下面再次部署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

这个红色需要根据实际的业务逻辑去写。

c43.jpg


make

c46.jpg


make install

c47.jpg

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

c49.jpg

c48.jpg

: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
c41.jpg

打开 192.168.1.139/a.php

c50.jpg


c51.jpg


c52.jpg


至此,php5.5.17这个版本也已经搭建好了。


其实多版本就是使用php-fpm 监听多个端口

每一个网站配置成不同的端口即可。





===============下面是部署的时候出现的错误内容,解决办法===============



问题汇总:




collect2: ld returned 1 exit status
make: *** [sapi/cli/php] Error 1

处理方法:

./configure …………


vi Makefile

找到下面这行:

EXTRA_LIBS = -lcrypt ...

在最后添加-liconv

pt.jpg




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

  1. #使用wget可以通过以下路径下载  

  2. wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/attic/libmcrypt/libmcrypt-2.5.7.tar.gz  

  3. #解压  

  4. tar -zxvf libmcrypt-2.5.7.tar.gz   

  5. #进入目录  

  6. 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