ubuntu12.10以后,默认的deb安装库上面的php版本已经是5.4了,公司的项目使用5.4的时候,还是会出现很多问题,所以不得不降级安装5.3
顺便说一句,我原来的环境是nginx + php5.4 + mysql 的,现在只是把php5.4降级到php5.3,其它的不修复。
新建一个叫做down_to_php53.sh,然后复制下面代码进去
#!/bin/bash # # Original for 5.3 by Ruben Barkow (rubo77) http://www.entikey.z11.de/ # release 1 PHP5.4 to 5.3 by Emil Terziev ( foxy ) Bulgaria # Originally Posted by Bachstelze http://ubuntuforums.org/showthread.php?p=9080474#post9080474 # OK, here's how to do the Apt magic to get PHP packages from the precise repositories: echo "Am I root? " if [ "$(whoami &2>/dev/null)" != "root" ] && [ "$(id -un &2>/dev/null)" != "root" ] ; then echo " NO! Error: You must be root to run this script. Enter sudo su " exit 1 fi echo " OK"; #install aptitude before, if you don`t have it: apt-get update apt-get install aptitude # or if you prefer apt-get use: # alias aptitude='apt-get' # finish all apt-problems: aptitude update aptitude -f install #apt-get -f install # remove all your existing PHP packages. You can list them with dpkg -l| grep php PHPLIST=$(for i in $(dpkg -l | grep php|awk '{ print $2 }' ); do echo $i; done) echo these pachets will be removed: $PHPLIST # you need not to purge, if you have upgraded from precise: aptitude remove $PHPLIST # on a fresh install, you need purge: # aptitude remove --purge $PHPLIST #Create a file each in /etc/apt/preferences.d like this (call it for example /etc/apt/preferences.d/php5_2); # #Package: php5 #Pin: release a=precise #Pin-Priority: 991 # #The big problem is that wildcards don't work, so you will need one such stanza for each PHP package you want to pull from precise: echo ''>/etc/apt/preferences.d/php5_3 for i in $PHPLIST ; do echo "Package: $i Pin: release a=precise Pin-Priority: 991 ">>/etc/apt/preferences.d/php5_3; done echo "# needed sources vor php5.3: deb http://bg.archive.ubuntu.com/ubuntu/ precise main restricted deb-src http://bg.archive.ubuntu.com/ubuntu/ precise main restricted deb http://bg.archive.ubuntu.com/ubuntu/ precise-updates main restricted deb-src http://bg.archive.ubuntu.com/ubuntu/ precise-updates main restricted deb http://bg.archive.ubuntu.com/ubuntu/ precise universe deb-src http://bg.archive.ubuntu.com/ubuntu/ precise universe deb http://bg.archive.ubuntu.com/ubuntu/ precise-updates universe deb-src http://bg.archive.ubuntu.com/ubuntu/ precise-updates universe deb http://bg.archive.ubuntu.com/ubuntu/ precise multiverse deb-src http://bg.archive.ubuntu.com/ubuntu/ precise multiverse deb http://bg.archive.ubuntu.com/ubuntu/ precise-updates multiverse deb-src http://bg.archive.ubuntu.com/ubuntu/ precise-updates multiverse deb-src http://bg.archive.ubuntu.com/ubuntu/ natty-backports main restricted universe multiverse deb http://security.ubuntu.com/ubuntu precise-security main restricted deb-src http://security.ubuntu.com/ubuntu precise-security main restricted deb http://security.ubuntu.com/ubuntu precise-security universe deb-src http://security.ubuntu.com/ubuntu precise-security universe deb http://security.ubuntu.com/ubuntu precise-security multiverse deb-src http://security.ubuntu.com/ubuntu precise-security multiverse deb-src http://archive.canonical.com/ubuntu natty partner deb http://extras.ubuntu.com/ubuntu precise main deb-src http://extras.ubuntu.com/ubuntu precise main deb http://bg.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse deb-src http://bg.archive.ubuntu.com/ubuntu/ precise-backports main restricted universe multiverse deb http://archive.canonical.com/ubuntu precise partner deb-src http://archive.canonical.com/ubuntu precise partner " >> /etc/apt/sources.list.d/precise.list aptitude update #apache2ctl restart echo install new from precise: aptitude -t precise install $PHPLIST # at the end retry the modul libapache2-mod-php5 in case it didn't work the first time: #aptitude -t precise install libapache2-mod-php5 #apache2ctl restart
然后执行
chmod +x down_to_php53.sh sudo ./down_to_php53.sh
执行完之后,重启php5-fpm和ngnix
sudo /etc/init.d/php5-fpm restart sudo /etc/init.d/nginx restart
这时,访问 http://127.0.0.1/,会出现502错误,查看ngnix日志,有如下问题
2013/08/05 20:17:10 [crit] 16107#0: *7 connect() to unix:/var/run/php5-fpm.sock failed (2: No such file or directory) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET /phpinfo.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "127.0.0.1" 2013/08/05 20:17:10 [error] 16107#0: *7 rewrite or internal redirection cycle while internally redirecting to "/index.html", client: 127.0.0.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", host: "127.0.0.1"
这是因为原来在nginx,我是这样配置的
location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; # # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini # # # With php5-cgi alone: # fastcgi_pass 127.0.0.1:9000; # # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; }
使用socket来连接,所以降级之后,还要修改一下新的配置文件
vim /etc/php5/fpm/pool.d/www.conf
找到
listen = 127.0.0.1:9000
加入
listen = /var/run/php5-fpm.sock
就可以了
Have fun with Ubuntu!