Ошибки при переходе при переходе с PHP 5.2.x на PHP 5.3.x (Deprecated: function..., глобальные переменные, работа с сессиями)

Нет картинки Ошибки Deprecated: function... в MODx 0.9.6.3 при переходе с PHP 5.2.x на PHP 5.3.x и другие тонкости, такие как замена глобальных переменных и работа с сессиями.

При переходе с PHP 5.2.x на PHP 5.3.x перестают работать некоторые функции, так php изживает и развивает себя. Но для разработчика начинается головная боль, особенно если используются CMS, написанные на PHP (например MODx), которые вдруг выдают ошибки.

Хотя это даже не ошибки, а предупреждения, что в дальнейшем, php не будет использовать некоторые функции или заменит их.

1) Итак счастливым обладателям php 5.3.x стоит заменить:

ereg() — впредь используйте preg_match()

ereg_replace() — пользуйтесь preg_replace()
eregi() — пользуйтесь preg_match() с модификатором ‘i’
eregi_replace() — пользуйтесь preg_replace() с модификатором ‘i’
split() — пользуйтесь preg_split()
spliti() — пользуйтесь preg_split() с модификатором ‘i’
set_magic_quotes_runtime() и ее синоним magic_quotes_runtime()
session_register() — пользуйтесь суперглобальный массив $_SESSION
session_unregister() — пользуйтесь суперглобальный массив $_SESSION
session_is_registered() — пользуйтесь суперглобальный массив $_SESSION
set_socket_blocking() — пользуйтесь е stream_set_blocking()
mysql_db_query() — пользуйтесь mysql_select_db() и mysql_query()
mysql_escape_string() — пользуйтесь mysql_real_escape_string()


2) Переменные Depecated в PHP 5.3.x надо заменить соответственно:

HTTP_SERVER_VARS -> _SERVER
HTTP_POST_VARS -> _POST
HTTP_ENV_VARS -> _ENV
HTTP_GET_VARS -> _GET
HTTP_COOKIE_VARS -> _COOKIES
HTTP_SESSION_VARS -> _SESSION
HTTP_POST_FILES -> _FILES


3) Теперь для разрушения сессии обязательно надо сделать unset всех переменных сессии ($_SESSION = array()):

session_start();
$_SESSION = array();
session_destroy();



Ошибка №1 (встретилась в MODx 0.9.6.3): Function split() is deprecated

PHP error debug
  Error:    Function split() is deprecated
  Error type/ Nr.:  - 8192 
  File:     /var/www/html/funfly/cms/manager/includes/document.parser.class.inc.php 
  Line:     844 
  Line 844 source:  $tempSnippetParams= split($splitter, $tempSnippetParams);


Решение:

Сначала небольшие изменения внесём в файл manager/includes/config.inc.php, чтобы нам показывались ошибки, заменим строку

error_reporting(E_ALL & ~E_DEPRECATED | E_STRICT);

на

error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);

Теперь в manager/includes/document.parser.class.php, заменим строку 2502

if (error_reporting() == 0 || $nr == 0 || ($nr == 8 && $this->stopOnNotice == false)) {

на

if (error_reporting() == 0 || $nr == 0 || (error_reporting() & $nr) != $nr || ($nr == 8 && $this->stopOnNotice == false)) {


чтобы игнорировались ошибки, которые нам неинтересны и они не передавалиь в конфигурационный файл.

Если не хотим игнорировать, то решением проблемы может быть замена split на explode


Источник: blog.ifreework.org/?p=302

almix
Разработчик Loco, автор статей по веб-разработке на Yii, CodeIgniter, MODx и прочих инструментах. Создатель Team Sense.

Вы можете почитать все статьи от almix'а.



Другие статьи по этой теме:

Комментарии (0)     Подпишитесь на RSS комментариев к этой статье.