Понизьте php5 до 5.4.9-4ubuntu2.2 в Ubuntu 13.10

Недавно я обновился до Ubuntu 13.10, и у меня возникла проблема с версиями PHP.

Мой клиент использует более старую версию php5, из которых самая последняя версия, которая будет работать с ним без ошибок устаревания, — 5.4.9-4ubuntu2.2. Ubuntu 13.10 поставляется с 5.5.3-1ubuntu2.

Я хотел бы знать, есть ли способ установить 5.4.9-4ubuntu2.2 на 13.10, не прибегая к компиляции исходных пакетов. Я полагаю, что должна быть командная строка для apt-get для установки более старой версии, о которой я просто не знаю.

Я пробовал sudo apt-get install php5=5.4.9-4ubuntu2.2 безуспешно.

Любая помощь приветствуется.


person Nathan Cox    schedule 01.11.2013    source источник
comment
Это не отвечает на ваш вопрос, но почему бы просто не удалить сообщения об ошибках E_DEPRECATED для этого клиентского виртуального хоста вместо того, чтобы понизить все?   -  person Lepidosteus    schedule 01.11.2013
comment
Вы уверены, что правильно указали эти номера версий, потому что это читается так, как будто вы пытаетесь понизить версию с 5.3.3 до 5.4.9, что не совсем имеет смысл.   -  person Sammitch    schedule 01.11.2013
comment
Вам нужно будет найти репозиторий с этой версией. Вы можете сделать sudo apt-get update, чтобы убедиться, что у вас есть текущий список пакетов. Если sudo apt-get -s install php5 не показывает версию 5.4, погуглите, чтобы узнать, есть ли другой репозиторий.   -  person aynber    schedule 01.11.2013
comment
@Саммич Опечатка; правильная версия 5.5.3.   -  person Nathan Cox    schedule 02.11.2013
comment
@Lepidosteus Удаление ошибок устаревания в настоящее время не представляется возможным. Это потребует замены еще более устаревшей версии PHP на сервере на более новую версию, а затем полностью перепишет классы mysql, за которые клиент должен будет заплатить.   -  person Nathan Cox    schedule 02.11.2013
comment
@NathanCox Lepidosteus предлагает просто отключить отчеты об ошибках для E_DEPRECATED. Функции, вызывающие эти сообщения, не имеют никаких изменений в функциональности по сравнению с предыдущими версиями PHP, сообщения просто уведомляют разработчиков о том, что функции будут удалены в будущих версиях PHP. Если вас беспокоят функции mysql_*, они, вероятно, не исчезнут до версии 5.6 или новее. например: error_reporting(error_reporting() ~E_DEPRECATED); отключит сообщения.   -  person Sammitch    schedule 02.11.2013


Ответы (3)


У меня такая же проблема, и нашел следующее решение. Я тестирую его в ближайшее время и опубликую с результатами, но он выглядит солидно.

# upgrade system, so you can add to ignore all updates later
sudo apt-get update
sudo apt-get upgrade

# remove your php, apache, etc
sudo apt-get purge apache2 php5 libapache2-mod-php5 # add here your server packages

# change repositories to raring  (with backup)
sudo sed -i.bak "s/saucy/raring/g" /etc/apt/sources.list

# update and install server packages
sudo apt-get update
sudo apt-get install apache2 php5 libapache2-mod-php5 phpmyadmin 

# change repositories back to saucy
sudo sed -i "s/raring/saucy/g" /etc/apt/sources.list

# ignore all current upgrades (package hold)
dpkg --get-selections | egrep '^(apache|php)' | sed 's/install/hold/g' | sudo dpkg --set-selections
person Tom Damon    schedule 06.11.2013
comment
На самом деле я нашел обходной путь в ini-файле PHP, который предотвратил смерть скриптов из-за ошибок устаревания, но это решение кажется жизнеспособной альтернативой. - person Nathan Cox; 06.11.2013

E_DEPRECATED сообщения являются информационными, и их нельзя рассматривать на том же уровне, что и предупреждение. Их цель — просто сообщить разработчикам, что некоторые функции, которые они используют, исчезнут в будущей версии.

Из документации:

Уведомления во время выполнения. Включите это, чтобы получать предупреждения о коде, который не будет работать в будущих версиях.

Хотя эти уведомления могут быть полезны при разработке, их, безусловно, следует отключить в рабочей среде. Вы можете сделать это, добавив ~E_DEPRECATED к строке error_reporting в php.ini или добавив следующую строку в свой скрипт/приложение:

error_reporting(error_reporting() ~E_DEPRECATED);

Документация по функциям.

Если я правильно прочитал ваш комментарий, эти сообщения связаны с использованием вами семейства функций mysql_*, которые устарели с PHP 5.5. Эти функции по-прежнему широко используются, и хотя они могут быть удалены, начиная с PHP 5.6, это все еще обсуждается.

Краткий ответ: вам не нужно ничего понижать, просто немного отключите настройки отчетов об ошибках, чтобы они не генерировались.

person Sammitch    schedule 01.11.2013

Мое решение:

sudo add-apt-repository 'deb http://cn.archive.ubuntu.com/ubuntu raring main'    #add back raring
sudo apt-get update
sudo apt-get remove php5-cli php5-common
sudo apt-get install php5-cli=5.4.9-4ubuntu2    #specify php version, lookup versions from: apt-cache policy php5-cli
sudo apt-mark hold php5-cli    #hold the version
person diyism    schedule 21.05.2014