Забыли пароль?
Запросите новый здесь.

Автор темы: yury
ID темы: 1193
Информация:
Тема содержит 7 сообщения, была просмотрена 2769 раз.
Просмотр темы
PHP-Fusion Russia » Веб-разработка » PHP
 Распечатать тему
Function eregi() is deprecated
yury
в аддоне доски объявлений есть такая строка

if (!preg_match("/adm/", $_SERVER['REQUEST_URI']) && ($p_data['panel_display'] == 1 || eregi((SEO == "1" ? BRD_INDEX_FILE_HTML : BRD_INDEX_FILE_PHP)."$", FUSION_REQUEST.(FUSION_QUERY ? "?".FUSION_QUERY : ""))))


вызывает ошибку Function eregi() is deprecated

на что заменить ереги в таком случае, чтобы все работало корректно, т.к на серваке php 5.3?
Изменил(а) yury, 02.01.2013 20:51
 
Truth_Explorer
"ereg", которой напичкан php-Fusion, в PHP 5.3.0 считается старой, медлительной и не нужной - поэтому ее и убрали.

Решение 1.

Изменяем функцию "ereg" на "preg_match":

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);




Решение 2 (необходим доступ к 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
 
yury
я читал это тоже, но не понял как применить в моем конкретном случае(
 
Polarfox
Вообще непонятно зачем смесь двух стилей?
Всегда делайте backup перед изменениями | Указывайте свою версию в подписи/профиле.
Ежели кто забанен за спам, но не считает себя ботом: можете сообщить мне об этом, все будет хорошо.

PolarLab - вход для подопытных
 
Web
yury
я не знаю. такой был компонент от спайкера
 
yury
сделал так
if (!preg_match("/adm/", $_SERVER['REQUEST_URI']) && ($p_data['panel_display'] == 1 || !preg_match((SEO == "/1/i" ? BRD_INDEX_FILE_HTML : BRD_INDEX_FILE_PHP)."/$/i", FUSION_REQUEST.(FUSION_QUERY ? "/?/".FUSION_QUERY : "//"))))

теперь ругается на другое в этой же строке

preg_match(): Delimiter must not be alphanumeric or backslash
 
mishqa35
можно попробывать так
if (!preg_match("/adm/", $_SERVER['REQUEST_URI']) && ($p_data['panel_display'] == 1)) без всего прочего только ковычки проверь, вроде правильно посчитал
 
Web

Поделиться этой темой
Социальные закладки: Vkontakte Odnoklassniki Mail.ru Facebook Google Tweet This
URL:
BBcode:
HTML:

Перейти на форум:
Похожие темы
Темы Форум Ответов / Просмотров Последние сообщения
Ошибка preg_replace(): The /e modifier is deprecated  →  Ошибки, баги 4 / 6063 26.05.2016 14:21
$one->two(); in function(){};  →  PHP 4 / 2138 18.01.2015 12:20
Warning: strftime() [function.strftime]/ Как исправить?  →  Ошибки, баги 11 / 2087 16.02.2013 15:52
Топ 5 пользователей форума
Alex Alex (1,166)   Zaxap Zaxap (1,078)   Vova Vova (877)   Pisatel Pisatel (678)   util util (666)