среда, 5 декабря 2012 г.

Замена PHP 5.3 на PHP 5.4 на Ubuntu 12.04 LBS

Наверняка многие, установив 12.04, с удивлением обнаружили, что в ней живет PHP версии 5.3.х. Меня это не слишком устраивало, так как проекты я стараюсь писать на "свежей" версии языка, чтобы было поменьше проблем при обновлениях на сервере. Итак, перелопатив кучу советов и настроив-таки рабочую машину, делюсь с вами своим опытом. Не браните громко, ибо сие произведение - мой первый опыт блоготворчества :)

В первую очередь проверьте, какую версию PHP вы имеете сейчас:
user@server:~$ php -v

Скорее всего, ответом будет:
PHP 5.3.10-1ubuntu3.4 with Suhosin-Patch (cli)

Что ж, приступаете к замене:
user@server:~$ sudo apt-get install make python-software-properties
user@server:~$ sudo add-apt-repository ppa:ondrej/php5
user@server:~$ sudo apt-get update
user@server:~$ sudo apt-get upgrade
user@server:~$ sudo apt-get install php5 libapache2-mod-php5

С этим проблем быть не должно :)
После замены php 5.3 на 5.4 [пере]устанавливаете расширения:
user@server:~$ sudo apt-get install php5-dev php5-curl php5-gd php5-imagick php5-intl php5-mcrypt php5-memcached php5-mysql php5-xdebug php5-xmlrpc

Если у вас есть расширения, которые устанавливались вручную (например, xdebug) или через pecl (например, mongo) - удаляете их и снова устанавливаете, как ни в чем не бывало:
user@server:~$ sudo pecl uninstall mongo
user@server:~$ sudo pecl install mongo

Снова смотрите на версию:
user@server:~$ php -v

Я сразу после процедуры получил следующее:

Failed loading /usr/lib/php5/20090626/xdebug.so:  /usr/lib/php5/20090626/xdebug.so: cannot open shared object file: No such file or directory
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php5/20100525/ffmpeg.so' - /usr/lib/php5/20100525/ffmpeg.so: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.4.9-4~precise+1 (cli) (built: Nov 30 2012 10:42:23)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies

Рассудив здраво, решил с ffmpeg-ом не заморачиваться (необходимости в нем пока не наблюдается), и я его снес.

Как видите, осталась проблема с xdebug. Но с ней справиться было легко: немного шаманства с locate показало, что теперь его .so-шка просто-напросто лежит в другой папке :) Мне осталось лишь вручную заменить путь с  "zend_extension=/usr/lib/php5/20090626/xdebug.so" на новый "zend_extension=/usr/lib/php5/20100525/xdebug.so" - и все заработало как часы:
user@server:~$ sudo nano /etc/php5/conf.d/20-xdebug.ini

Заметка для особо любопытных: обратите внимание, что теперь имена почти всех .ini-файлов в /etc/php5/conf.d (кроме установленных вручную) начинаются с 10- или 20-.

Снова проверяете:
user@server:~$ php -v
Если остались проблемы (скорее всего это "ручные" расширения) - переустанавливаете расширения, на которые ругается система (смотри выше). У меня система выдала следующий ответ:
PHP 5.4.9-4~precise+1 (cli) (built: Nov 30 2012 10:42:23)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2012 Zend Technologies
    with Xdebug v2.2.1, Copyright (c) 2002-2012, by Derick Rethans


Если же (ура!) все в порядке - рестартуете апач:
user@server:~$ sudo service apache2 restart

Вуа-ля, пользуйтесь :)