Оправдал ли ваши ожидания релиз 7.01?
Полностью оправдал
4% [1 Голос]
Могло быть и лучше
60% [15 Голосов]
Фиолетово, не использую php-fusion :)
12% [3 Голосов]
Разочаровал, но переходить надо
16% [4 Голосов]
Лечу депрессию :)
8% [2 Голосов]
Голосов: 25
Вы должны авторизироваться, чтобы голосовать. Начат: 17/08/2010 04:49 Архив опросов
|
· Гостей: 2
· Пользователей: 0
· Всего пользователей: 1,014
· Новый пользователь: Eugene
|
|
счетчики |
 |
|
|
 |
Deprecated: Function eregi() is deprecated in /opt/lampp/htdocs/ |
С чего все начиналось
Решил я как-то обновить свой веб-сервер XAMPP. Тем более, что уже вышло куча обновлений для него. Ничего не подозревая, я с радостной улыбкой скачал новую версию XAMPP 1.7.2 и поставил его. Какое же мое было удивление, когда мой сайт равномерно покрылся, почти одинаковыми, ошибками вида:
Код
Deprecated: Function eregi() is deprecated in /opt/lampp/htdocs/maincore.php on line 18
(ну конечно адреса к страницам там были разные). Более того перестала работать горизонтальное меню на CSS. Начал активно "гуглить"- искать в чем может быть проблема. Но, к сожалению, так ничего и не нашел. Кстати, меня немного удивляет, почему так мало в интернете об этом написано. Но видимо эта связка php-Fusion и PHP 5.3.0 только набирает популярность.
Решение проблемы
Вариант №1:
Так вот... все же удалось мне найти пару статеек на английском языке о особенностях PHP 5.3.0. В общем там было написано, что при подобных ошибках в коде сайта необходимо изменить функцию "ereg" на "preg_match". Новый PHP 5.3.0 уже не знает, что такое "ereg". Вот сама статья:
Цитата
Fix `ereg is deprecated` errors in PHP 5.3
If you upgraded to PHP 5.3, chances are high you’re going to run into a few warnings or deprecated function messages.
An example is the ereg family of functions, which are gone for good, as they were slower and felt less familiar than the alternative Perl-compatible preg family.
To migrate ereg():
ereg("\.([^\.]*$)", $this->file_src_name, $extension);
becomes
preg_match("/\.([^\.]*$)/", $this->file_src_name, $extension);
Notice that I wrapped the pattern (\.([^\.]*$)) around / /, which are RegExp delimiters. If you find yourself escaping / too much (for an URL for example), you might want to use the # delimiter instead.
To migrate ereg_replace():
$this->file_dst_name_body = ereg_replace("[^A-Za-z0-9_]", "", $this->file_dst_name_body);
becomes
$this->file_dst_name_body = preg_replace("/[^A-Za-z0-9_]/", "", $this->file_dst_name_body);
Again, I just added delimiters to the pattern.
If you are using eregi functions (which are the case-insensitive version of ereg), you’ll notice there’re no equivalent pregi functions. This is because this functionality is handled by RegExp modifiers.
Basically, to make the pattern match characters in a case-insensitive way, append i after the delimiter:
eregi("\.([^\.]*$)", $this->file_src_name, $extension);
becomes
preg_match("/\.([^\.]*$)/i", $this->file_src_name, $extension);
Функция "ereg", которой напичкан php-Fusion, в новой PHP 5.3.0 уже считается старой, медлительной и не нужной, поэтому, собственно, ее и убрали.
Я так подумал, посмотрел на количество ошибок на сайте, подсчитал сколько времени займет "перелопачивание" всего кода php-Fusion и мне взгрустнулось.
Все же этот вариант не по мне. Тем более эти ошибки выскакивали и в разных панелях и модулях, которые тоже необходимо обновлять и каждый раз "перелопачивать" их код, пока обновления не пойдут с поддержкой PHP 5.3.0 .
Так что я это отбросил и стал дальше искать и думать.
Вариант № 2 :
Не буду сильно расписывать.
На одном форуме посоветовали мне обратиться на сайт SVN репозитория: _http://php-fusion.svn.sourceforge.net/viewvc/php-fusion/Version7/_ (из ссылки убрать нижнюю черту). Там уже готовый php-Fusion 7, оптимизированный под PHP 5.3.0
Вариант № 3 :
Этот вариант я сам выбрал. Наверное он самый легкий.
"Перелопачиваясь" в php.ini я случайно наткнулся на решение. В общем, открываем файл настройки PHP (php.ini) и ищем, ближе к самому концу файла, текст:
Цитата
; overload(replace) single byte functions by mbstring functions.
; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
; etc. Possible values are 0,1,2,4 or combination of them.
; For example, 7 for overload everything.
; 0: No overload
; 1: Overload mail() function
; 2: Overload str*() functions
; 4: Overload ereg*() functions
; http://php.net/mbstring.func-overload
; mbstring.func_overload = 0
0 - Оставить все без изменений.
1-4 Включить одну из функций.
7 - Включить сразу все функции.
Слово "включить" тут не совсем корректно. Речь идет об включении поддерживания старых функций, при этом новые будут отключены. Если у Вас нету никаких ошибок, то лучше их не включать.
Все это пишется в нижней строке, притом, главное, не забудьте убрать символ ";" в начале строки. Т.е. если Вы хотите, что бы были включены все функции, то нижняя строка примет вид:
Цитата
mbstring.func_overload = 7
.
Вот и все.
Заключение
Старые функции, которые мы сейчас включили, в ущерб новым, считаются менее стабильными и более "тормазными". Поэтому, если есть шанс оставить все новое на месте и решит проблему другими способами, то это даже лучше.
По мне лично разницу в скорости не ощутил. А ereg и так быстро очень работает. Все в ваших руках и головах :-).
Извиняюсь, если я слишком "тянул резину" в статье, просто хотелось по максимуму все разжевать, чтобы потом не возникли вопросы у новичков.
У меня еще к Вам просьба. Отпишитесь в комментариях, если у Вас все получилось сделать по моей статье и сайт работает на урас новым php.
Ибо у меня не так все просто получилось. Некоторые глюки появились: редкие, но меткие )
http://auroralan.ru
|
 |
Комментарии |
#1 |
September 05 2009 15:11:28
#2 |
September 06 2009 15:41:36
|
 |
Добавить комментарий |
|
Пожалуйста, залогиньтесь для добавления комментария.
|
|
Вы не зарегистрированы? Нажмите здесь для регистрации.
Забыли пароль? Запросите новый здесь.
|
|
Вы должны авторизироваться, чтобы добавить сообщение.
|
Будем благодарны, за размещение нашей кнопки или ссылки на наш портал.
|
|