Главная > Программирование > PHP Особенности миграции на PHP 5.3.xУстанавливая новое программное обеспечение на крупном проекте, работающем на CentOS linux, я сталкнулся с тем, что все сайты, располагающиеся на сервере стали выдавать ошибки: Deprecated: Function eregi() is deprecated in ... Что было мягко говоря странно и весьма неприятно. Что же сделать, чтобы не возникали ошибки вида Deprecated: Function is deprecated in" href="../page/deprecated">Deprecated: Function is deprecated in? Углубившись в проблему я быстро выяснил, что возникновение данных ошибок связано с переходом на php версии 5.3.1, в которой появились некоторые изменения. Конечно такая ситуация как обычно описана в manual'е, но как говорится, кто бы знал! Что такое deprecated вообще? Это функции, опции и другие возможности приложения, в данном случае php, которые помечены как неиспользуемые и в ближайших версиях будут удалены. Это заставляет задуматься и переписать свой код, без использования данного функционала или заменив его аналогами, которые предлагает официальный сайт php. В данной статье я расскажу Вам о особенностях миграции на ветку php 5.3.x и еще несколько интересных моментов Функции более не используемые в ветке PHP 5.3.x. Deprecated функцииНачнем с того, что в ветке 5.3.x появилось два новых уровня предупреждения об ошибках (error level), из-за которых ошибки на страницах и появляются. Теперь в распоряжении php-разработчиков есть, помимо прочего, E_DEPRECATED и E_USER_DEPRECATED уровни отображения, управляющие выводом предупреждений (warnings) на глобальном уровне и на уровне приложений пользователя, соответственно. Первым делом, сталкнувшись с проблемой возникновения ошибки Deprecated: Function function() is deprecated in необходимо выключить данные предупреждения в своем php.ini файле, чтобы сайты восстановили работоспособность и не выдавали headers already sent и прочие возможные неприятности от подобного вывода ошибок. А теперь давайте рассмотрим более подробно полный список изменений deprecated возможностей в версии php 5.3.1, которые описаны на официальном сайте в разделе Migrating from PHP 5.2.x to PHP 5.3.x, но к сожалению на английском языке. Опции php.iniКасательно изменений в файле php.ini, то, как я уже говорил, по умолчанию считается включеным E_DEPRECATED уровень предупреждений об ошибках, который включает в себя E_USER_DEPRECATED. Так же как deprecated помечены следующие опции конфигурационного файла php:
Более не используемые функцииС чего собственно все и началось, то есть откуда ноги растут у упомянутых в начале статьи ошибок! В php 5.3.x помечены как более не используемые (deprecated) следующие функции:
Изменяйте код!Многие из Вас обнаружив ошибки при переходе на php 5.3.1 и поискав информацию в поисковых системах или же воспользовавшись данной статьей, чтобы избежать вывода ошибок вида Deprecated: Function function() is просто отключит уровни предупреждений E_DEPRECATED и E_USER_DEPRECATED в файле php.ini. Такой подход конечно возможен на этапе принятия экстренных мер по восстановлению работоспособности сайтов, но не более того. Не ленитесь, измените свой код в сооветствии с новыми требованиями и возможностями (а новых возможностей в php 5.3.x появилось немало)! Сейчас Ваши функции еще работают и просто выдают предупреждения, но новый релиз может застать Вас в расплох и поддержка каких-то функций в нем уже не гарантируется, поэтому лучше позаботиться о валидном коде заранее, а не делать все в авральном режиме. Стоит заметить, что разработчики php планируют убрать большинство описанных выше deprecated функций только к выходу PHP6, но как показывает практика, такие изменения могут быть внесены и раньше. Еще немного о изменениях в PHP 5.3.xКонечно при выходе php 5.3.1 появилось довольно много изменений и описывать их здесь смысла нет, так как все они есть на официальном сайте. Однако стоит отметить, что есть довольно интересные и полезные вещи, например, поддержка пространства имен (namespace), static функции в методах классов (static функции не переопределяются при расширении класса через extend) и многое другое. Раз уж мы изначально заговорили о deprecated функциях в php 5.3.1, то справедливости ради стоит сказать и о undeprecated функциях, то есть о функционале, который был ранее помечен как deprecated, но потом оставлен в релизе. Такая функция всего одна - is_a, которая была помечена как deprecated в версии php 5.0.0 и по сути дела является синонимом функции instanceof(), но по просьбам сообщества была возвращена возможность использовать данный сисноним. Дело в том, что к функции просто привыкли, да и записывать ее удобнее, потому что она короче. Разработчики пошли на встречу потребителям своего продукта, что весьма похвально. Не забудьте про временную зону!В новой версии PHP обязательно необходимо указать в конфигурационном файле php.ini параметр date.timezone иначе интерпретатор будет отображать Вам предупреждения при работе с любой функцией даты или времени. Например, можно указать так: date.timezone = "Europe/Moscow" Интересно то, что данная особенность нигде не указана на официальном сайте, но из практики оказывается, что использование данного параметра является обязательным. Будьте внимательны! Материал взят с сайта: http://www.master-blog.ru/page/deprecatedГлавная > Программирование > PHP |