Почему `ereg` устарел в PHP?

Почему ereg устарел в PHP?

У меня было много функций, которые использовали это, теперь они всегда выдают предупреждение.

Какая альтернатива этому тоже?


person Starx    schedule 20.06.2010    source источник


Ответы (4)


http://pl.php.net/manual/en/function.ereg.php

Примечание. Начиная с PHP 5.3.0, расширение regex устарело и заменено расширением PCRE. Вызов этой функции выдаст уведомление E_DEPRECATED. См. список отличий для получения справки по преобразованию в PCRE.

person hsz    schedule 20.06.2010

Ereg устарел, так как был заменен расширением PCRE. Причина (ы), по которой он был заменен и устарел, указана в приведенной ниже ссылке, но, чтобы сэкономить вам время, вот скопированный и вставленный ответ:

Примечание: preg_match(), использующий Perl-совместимый синтаксис регулярных выражений, часто является более быстрой альтернативой ereg().

PHP ereg и preg

Одно из различий между ними заключается в том, что ereg ищет самый длинный совпадающий результат, а preg ищет первый результат. Вот список различий между ними, который поможет вам определить, как лучше всего обновить код: http://www.php.net/manual/en/reference.pcre.pattern.posix.php

Следует отметить, что PHP 6.0 ПОЛНОСТЬЮ удалил ereg, поэтому, если вы в конечном итоге собираетесь перенести свой код на более новый сервер, который может использовать PHP 6.0, функция ereg больше не будет доступна.

person abelito    schedule 20.06.2010

На странице документации написано, почему:

Примечание. Начиная с PHP 5.3.0, расширение regex устарело, вместо него используется расширение PCRE. Вызов этой функции выдаст уведомление E_DEPRECATED. См. список отличий для получения помощи по переходу на ПКРЕ.

person Dean Harding    schedule 20.06.2010

Одна из возможных причин связана с проблемами производительности, как уже ответили другие.

Я хотел бы добавить еще одну (пока) возможную причину:

Предположим, вы написали такой код (PHP 5.3):

<?php
$arg=$_GET['key'];
if (ereg('^[A-Za-z0-9]+$', $arg) === FALSE){
    die('Invalid key');
}
# Do some other things with $arg
?>

Можно обойти это, указав этот URL:

foo.php?key=A%00text
                ^~~~

при этом часть text представляет собой произвольно все, что он хочет, что оставляет огромный недостаток безопасности в коде. preg_match(), однако, не имеет этой проблемы. Поэтому вам лучше перенести весь свой код на preg, так как ereg вообще больше не доступен в PHP 6.0.

person iBug    schedule 16.11.2017