最近遇到了要在ubuntu 12.04 上升级php版本的问题,下面是升级php到最新的版本的方法:

 

Please note: This works fine. But this package will also upgrade your apache to version 2.4 which has different config files than apache 2.2 and even deletes stuff, like /etc/apache2/sites-available/default when upgrading. This may result in a loss of your apache settings (vhost, mod_rewrite stuff etc.). Be aware of that ! This shit cost me a full weekend. This affects only upgrades, not fresh installs for sure.Update: This is a known bug (​​more here​​), I’ll keep this post updated…

 

How to install

There’s an excellent and (usually) hassle-free method to install the latest version of PHP5 (which is 5.5.3 when i’m writing this) with 3 simple bash commands:

1. Add this package-repository to your system. If Ubuntu says that you need to download a key first, then follow the instructions given in the notice.

sudo add-apt-repository ppa:ondrej/php5


If you get an error message now, then please do an update first and install the python-software-properties, that need to be necessary to add a package repository:



Advertisement


 

sudo apt-get update
sudo apt-get install python-software-properties


2. Update

sudo apt-get update


3. Install PHP

sudo apt-get install php5


Check the installed version of PHP via

php5 -v


Please note: The ondrej/php5 repository (which is used here) provides the very latest version of PHP. Usually the new version of PHP is available a few days after it was been officially released. This is really cool and a big step forward as Ubuntu, Debian, CentOS etc. provide only very old versions by default.

[wp_ad_camp_2]

 

To UPDATE from PHP 5.3 / 5.4 to PHP 5.5:

It’s also possible to update from any PHP version to the latest one with exactly the commands above. But, after doing

sudo apt-get install php5


you’ll have to restart the server with

sudo /etc/init.d/apache2 restart


or

sudo service apache2 restart


 

By the way, I’ve also written a tutorial on “​​How to setup latest version of PHP 5.5 on Debian Wheezy 7.0/7.1/7.2 (and how to fix the GPG key error)​​“, which is different from this here.

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

 

嘿嘿,照上面的更新之后可能会遇到问题,nginx 502 bad gateway错误,我就遇到了,下面的stack overflow上面的回答,完美解决!!

 

 


120down voteaccepted




If anyone finds this page by encountering the same problem I had, I found the answer here:​​http://www.howtoforge.com/installing-nginx-with-php5-and-php-fpm-and-mysql-support-lemp-on-ubuntu-12.04-lts​

For those of you who can't be bothered to click and work it out for themselves... ;)

The Condition:

Ubuntu or Debian server with NGINX and PHP 5.3 works fine but upgrading PHP to 5.4 gives 502 Bad Gateway errors. Looking for services running on port 9000 (typically running ​​netstat -lp​​ or similar) returns nothing.

The fix:

Open ​​/etc/php5/fpm/pool.d/www.conf​​ and make a note of the 'listen' parameter (in my case ​​/var/run/php5-fpm.sock​​):

; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = /var/run/php5-fpm.sock


and replace the fastcgi_pass variable in your vhost with the location you just noted.

So this sample symfony2 configuration (taken from here: ​​http://wiki.nginx.org/Symfony​​):

  # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ ^/(app|app_dev)\.php(/|$) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}


becomes this:

  # pass the PHP scripts to FastCGI server at /var/run/php5-fpm.sock
location ~ ^/(app|app_dev)\.php(/|$) {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}


Then restart nginx:

sudo /etc/init.d/nginx restart


Note: replace ​​~ ^/(app|app_dev)\.php(/|$) {​​ with ​​~ ^/index\.php(/|$) {​​ if you're not on SF2**

Hope this saves someone a little bit of time :)

Edit

Of course, you could change the ​​listen = /var/run/php5-fpm.sock​​ to ​​listen = 127.0.0.1:9000​​ in ​​/etc/php5/fpm/pool.d/www.conf​​ then restart php5-fpm (which would save you from having to change your vhosts), but you have to assume they changed php5-fpm to run through a socket rather than listening on port 9000 for a reason.

Edit2

If you're still experiencing 502 error see this answer: ​​nginx error connect to php5-fpm.sock failed (13: Permission denied)​