Переход на PHP 5.4

Для начала останавливаем apache, чтобы не мешался пока суть, да дело:
/etc/init.d/apache2 stop

Сносим всё PHP которое установлено:
apt-get remove php5-cli php5-common php5-suhosin php5-mcrypt php5-mysql php5-gd php5-dev php-pear php5-curl php-apc php5-memcache php5-fpm
apt-get autoremove

Лезем в конфигурационный файл /etс/apt/sources.list стираем там 2 старые строки посвященные dotdeb.org и вместо них вписываем такие:
deb http://packages.dotdeb.org squeeze-php54 all
deb-src http://packages.dotdeb.org squeeze-php54 all

Обновляемся:
apt-get update

И ставим всё новое:
apt-get install php5-cli php5-common php5-mcrypt php5-mysql php5-gd php5-dev php-pear php5-curl php5-apc php5-memcache php5-fpm
apt-get autoremove

  • php5-suhosin для PHP 5.4 не нужен и не рекомендован.
  • APC берём тоже с dotdeb, поэтому пакет называется php5-apc, a не php-apc как раньше.
  • По ходу дела пару раз спросят что делать с конфигами (php.ini и т.п.)- решайте сами. Можно оставить старые, можно взять новые из устанавливаемых пакетов, можно посмотреть различия. Я советую ставить новые, хотя это и означает что все изменения которые в них вносились придётся делать заново

Если вы установили новые конфиги, то вносим в них изменения упомянутые в «Часть VI.PHP». Номера строк в конфигах будут другие. На всякий случай перечисляю директивы, на которые необходимо обратить внимание.
/etc/php5/fpm/php.ini:
expose_php
mail.add_x_header
sendmail_path
disable_functions
error_log
session.save_path

/etc/php5/fpm/pool.d/www.conf:
listen
pm.max_children
pm.start_servers
pm.min_spare_servers
pm.max_spare_servers
pm.max_requests

/etc/php5/cli/php.ini:
expose_php
mail.add_x_header
sendmail_path


Теперь правим конфигурации apache (потому что эти нехорошие люди, по неведомым причинам, переименовали /usr/sbin/php-fpm в /usr/sbin/php5-fpm ). Итак, в /etc/apache2/sites-available/superls.ru находим и правим две строки:
Было:
Action php-fastcgi /usr/sbin/php-fpm.fcgi  
ScriptAlias /usr/sbin/php-fpm.fcgi /usr/sbin/php-fpm

Cтало:
Action php-fastcgi /usr/sbin/php5-fpm.fcgi  
ScriptAlias /usr/sbin/php5-fpm.fcgi /usr/sbin/php5-fpm


Далее в /etc/apache2/mods-available/fastcgi.conf меняем строку:
Было:
FastCGIExternalServer /usr/sbin/php-fpm -socket /var/run/php5-fpm.socket -idle-timeout 30

Cтало:
FastCGIExternalServer /usr/sbin/php5-fpm -socket /var/run/php5-fpm.socket -idle-timeout 30


Cтартуем всё:
/etc/init.d/php5-fpm restart
/etc/init.d/apache2 start


Автор Gmugra mmozg.net

Обновление PHP до версии 5.4

Краткий список изменений:
  • «Волшебные» кавычки теперь не работают. Приложения, которые используют эту возможность, могут нуждаться в обновлении во избежание проблем с безопасностью. Функции get_magic_quotes_gpc() и get_magic_quotes_runtime() теперь всегда возвращают FALSE. Функция set_magic_quotes_runtime() вызывает ошибку уровня E_CORE_ERROR.
  • Возможность передачи по ссылке во время вызова функции была убрана.
  • Операторы break и continue теперь не принимают аргументов в виде переменной. Например, выражение break 1 + foo() * $bar; невозможно. Вы по-прежнему можете использовать явный аргумент в виде статической константы. Например, break 2;. Побочным эффектом этого изменения является то, что конструкции break 0; иcontinue 0; более недопустимы.
  • В расширении date and time временная зона не может быть более установлена с помощью переменной окружения TZ. Вместо этого вам необходимо указать временную зону, используя опцию php.ini date.timezone или функцию date_default_timezone_set(). PHP теперь не будет пытаться определять временную зону. Вместо этого будет установлена зона «UTC» и выдано предупреждение E_WARNING.
  • Нецифровые смещения строк, например $a['foo'], где $a — это строка, теперь возвращают false в функции isset() и true в функции empty() и вызывают предупреждениеE_WARNING при подобном использовании. Смещения, заданные типами double, bool и null также приводят к генерации предупреждения E_NOTICE, а строки, содержащие числа ($a['2']), все еще работают как и раньше. Обратите внимание, что смещения, подобные'12.3' и '5 foobar' рассматриваются как нечисловые и вызывают предупреждениеE_WARNING, но преобразовываются к 12 и 5 соответственно по причине необходимости сохранения обратной совместимости. Примечание: следующий код возвращает различные результаты. $str='abc';var_dump(isset($str['x'])); // false для PHP 5.4 и выше, но true для 5.3 и ниже
  • Преобразование массива в строку теперь приводит к предупреждению E_NOTICE, но результат преобразования будет по-прежнему строка «Array».
  • Преобразование NULL, FALSE или пустой строки в объект путем добавления свойства теперь будет генерировать ошибку уровня E_WARNING вместо ошибки E_STRICT.
  • Имена параметров, которые «затеняют» имена суперглобальных переменных, теперь расцениваются как фатальная ошибка. Это правило запрещает код, подобный этому:function foo($_GET, $_POST) .
  • Хеш-алгоритмы Salsa10 и Salsa20 были удалены.
  • Функция array_combine() теперь возвращает array() вместо FALSE, когда в качестве параметров заданы два пустых массива.
  • Если вы используете функцию htmlentities() с азиатскими наборами символов, то она работает также, как функция htmlspecialchars(). Так всегда было в предыдущих версиях PHP, а теперь генерируется ошибка уровня E_STRICT.