Миграция с php 5.2 на php 5.3

  • 17 июля 2010 г.
  • 696 Слова
Предпосылки к миграции:
1) Желание иметь свежий софт, очевидно обусловлено желанием использовать новые баги фичи, новый софт всегда лучше, правда? *приторно розовые очки*
2) Ветка 5.3 релизнуласьуже год назад(30 июня 2009), в начале марта этого года релизнули версию 5.3.2, а это обещает некоторую стабильность.
3) Ubuntu lucid, новый сервер с длинным сроком поддержки — 5 лет от Canonicalпоставляет версию PHP 5.3, как единственно возможную, а это значит наша компанию будет жить с этим дистрибутивом как минимум ближайшие 2.5 года.

Поддерживать на новой системе мне необходимо было некийпроприетарный софт, который частично предоставляет сырцы, частично шифрован с помощью ioncube.

Основная загвоздка с которой пришлось столкнуться это то что часть функций получили статус deprecate. В частности получиладанный статус функция split, по очевидным причинам, но продукт не мой и он должен работать.

Что происходит внутри PHP, когда он натыкается на некую deprecate функцию?
Он выставляет флаг ошибки данногокласса(E_DEPRECATED) и выводит сообщение пользователю. Если же приложение сложное, например общается с внешним миром по какому-то протоколу типа SOAP, то ошибка предупреждения может заблокироватьработу приложения(и как следствие пользователя).

Что можно придумать?

1) Самый просто и правильный способ, запретить сообщения данного класса ошибок.

Для этого в php.ini надо выставить:error_reporting = E_ALL & ~E_DEPRECATED

2) display_errors = On

Сходный с первым способом, но будет подавлять вывод всех ошибок.

3) 1й и 2й способ может не помочь, если переменная error_reporting и/илиdisplay_errors переопределяются внутри приложения, например с помощью функции error_reporting или ini_set.

Можно попробовать заменить deprecate функции в коде.

Для функции split это можноосуществить с помощью 2х замен:
а) если нужно заменить некий набор символов, тогда split можно заменить на explode
б) если split использует регулярные выражения, то можно...