Почему ereg
устарел в PHP?
У меня было много функций, которые использовали это, теперь они всегда выдают предупреждение.
Какая альтернатива этому тоже?
Почему ereg
устарел в PHP?
У меня было много функций, которые использовали это, теперь они всегда выдают предупреждение.
Какая альтернатива этому тоже?
http://pl.php.net/manual/en/function.ereg.php
Примечание. Начиная с PHP 5.3.0, расширение regex устарело и заменено расширением PCRE. Вызов этой функции выдаст уведомление E_DEPRECATED. См. список отличий для получения справки по преобразованию в PCRE.
Ereg устарел, так как был заменен расширением PCRE. Причина (ы), по которой он был заменен и устарел, указана в приведенной ниже ссылке, но, чтобы сэкономить вам время, вот скопированный и вставленный ответ:
Примечание: preg_match(), использующий Perl-совместимый синтаксис регулярных выражений, часто является более быстрой альтернативой ereg().
Одно из различий между ними заключается в том, что ereg ищет самый длинный совпадающий результат, а preg ищет первый результат. Вот список различий между ними, который поможет вам определить, как лучше всего обновить код: http://www.php.net/manual/en/reference.pcre.pattern.posix.php
Следует отметить, что PHP 6.0 ПОЛНОСТЬЮ удалил ereg, поэтому, если вы в конечном итоге собираетесь перенести свой код на более новый сервер, который может использовать PHP 6.0, функция ereg больше не будет доступна.
На странице документации написано, почему:
Примечание. Начиная с PHP 5.3.0, расширение regex устарело, вместо него используется расширение PCRE. Вызов этой функции выдаст уведомление E_DEPRECATED. См. список отличий для получения помощи по переходу на ПКРЕ.
Одна из возможных причин связана с проблемами производительности, как уже ответили другие.
Я хотел бы добавить еще одну (пока) возможную причину:
Предположим, вы написали такой код (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.