如何从PHP 5.4降级到5.3

最近我升级了PHP到5.4版本,但是似乎出现了问题,因为APC与之不兼容。然而,这迫使我别无选择只能降级到5.3版本,请问我该如何操作呢?
我执行了apt-get remove php5apt-get purge php5,然后从apt-get中移除了5.4的仓库,接着执行了apt-get install php5,它显示正在安装5.3版本,并且我重启了php-fastcgiphp5-fpm,但是当我运行php -v时,它显示的还是5.4版本。
请问我该如何从5.4降级到5.3呢?
我的服务器运行的是Ubuntu 11.04版本。
5个回答

降级 PHP 5.4 到 5.3

在 Ubuntu 上进行降级过程非常混乱。 以下是一个可能会对您有用的脚本(它会移除 PHP 5.4 并安装 PHP 5.3):

sudo apt-get remove --purge `dpkg -l | grep php | grep -w 5.4 | awk '{print $2}' | xargs`
sudo apt-get install php5=5.3.10-1ubuntu3.4 php5-cli=5.3.10-1ubuntu3.4 php5-common=5.3.10-1ubuntu3.4 libapache2-mod-php5=5.3.10-1ubuntu3.4
sudo apt-get install php5=5.3.10-1ubuntu3.4 php5-cli=5.3.10-1ubuntu3.4 php5-common=5.3.10-1ubuntu3.4 libapache2-mod-php5=5.3.10-1ubuntu3.4
sudo apt-get install php-pear=5.3.10-1ubuntu3.4 php5-curl=5.3.10-1ubuntu3.4 php5-gd=5.3.10-1ubuntu3.4 php5-intl=5.3.10-1ubuntu3.4 php5-mysql=5.3.10-1ubuntu3.4 php5-pspell=5.3.10-1ubuntu3.4 php5-recode=5.3.10-1ubuntu3.4 php5-snmp=5.3.10-1ubuntu3.4 php5-sqlite=5.3.10-1ubuntu3.4 php5-tidy=5.3.10-1ubuntu3.4 php5-xmlrpc=5.3.10-1ubuntu3.4 php5-xsl=5.3.10-1ubuntu3.4

你可以通过以下命令检查可用的版本:apt-cache showpkg php5

安装完成后,可以通过以下命令验证:php --version

请注意,不要安装任何未指定包版本的其他软件包(如php5-xcache),否则apt-get会再次替换您的PHP实例为5.4版本!

为了防止这种情况发生,您可以锁定这些软件包。

使用dpkg锁定软件包

要通过dpkg锁定软件包,可以执行以下命令:

echo "php5 hold" | sudo dpkg --set-selections

运行以下命令以安装所有PHP包:
dpkg --get-selections | grep ^php5 | sed s/install/hold/g | sudo dpkg --set-selections

以下命令将显示您的php软件包的持有状态:
sudo dpkg --get-selections | grep ^php

使用aptitude保留软件包

您还可以使用aptitude来保留软件包,例如:

sudo aptitude hold php5

不可保留:

sudo aptitude unhold php5

3在Ubuntu 13.x中,5.3.10-1ubuntu3.4已经不存在了。 - kenorb
如何撤销您的回答? - tolgap
你是指回到PHP 5.4版本还是恢复配置文件?配置文件应该保留原样(不应删除任何个人配置)。如果你想回到PHP 5.4,那么可以通过取消保持的软件包并重新安装php5来撤销操作,例如使用sudo apt-get install php5进行重新安装或卸载/安装。 - kenorb

首先执行apt-cache showpkg php5。在那里你会看到关于包php5的版本和其他信息。
要安装特定版本,请运行apt-get install <package name>=<version> 在我的Ubuntu 11.10中,应该是apt-get install php5=5.3.6-13ubuntu3.6

6如果 apt-cache showpkg php5 不再显示 5.3.x 版本了,那该怎么办呢? - kenorb

也许这个指南可以帮到你:如何在Ubuntu中降级软件包

所以,要下载和安装任意可用版本的软件包,你需要执行以下步骤:

sudo apt-get install Package=Version

我有一个类似的问题。
我移除了仓库。
你必须记住,php -v会运行在php-cli包中的可执行文件,所以你也必须将其移除。
所以我按照以下步骤回到了5.3.10版本:
sudo apt-get remove php5-cli php5 php5-common
sudo apt-get install php5 php5-mysql php5-curl

现在应该显示所需的版本:
php -v

它为我安装了最新的5.6版本。 - JohnnyQ

从你描述的步骤来看,你在清除php5.4并删除php5.4仓库后忘记了执行apt-get update。
假设你在apt源中已经没有这个仓库了,如果你运行:
apt-get remove --purge php5 && apt-get update && apt-get install php5

你应该在5月3日回来。

在Ubuntu 13.x中,默认情况下php5指向的是5.4.x版本。 - kenorb