Хорошая альтернатива eregi() в PHP
Я часто делаю быстрые проверки, как это:
if (!eregi('.php', $fileName)) {
$filename .= '.php';
}
Но, как eregi()
устарел в PHP 5.3, код теперь выдает ошибки.
Есть ли другая функция, которая ведет себя точно так же, как eregi()
? Я ничего не знаю о регулярных выражениях и не хочу учиться, поэтому preg_match()
и т.д. не будет работать для меня.
8 ответов
stristr достигает того же результата, что и eregi (по крайней мере, когда вы не используете регулярные выражения):
if (!stristr($fileName, '.php'))
$filename.='.php';
Вы также можете сделать "фальшивый" eregi следующим образом:
if (!function_exists('eregi')) {
function eregi($find, $str) {
return stristr($str, $find);
}
}
Обновление: обратите внимание, что stristr
не принимает регулярные выражения как eregi
и в этом конкретном случае (проверяя расширение) лучше использовать решение vartec.
Конечно, вы знаете, что это не то, что вы ожидаете? В регулярном выражении "." означает любой символ, так eregi('.php',$fileName)
означает имя файла с любым символом, за которым следует "php". Так, например, "blabla2PHP.txt" будет соответствовать вашему регулярному выражению.
Теперь то, что вы хотите сделать, это:
$file_ext = pathinfo($filename, PATHINFO_EXTENSION);
if(strtolower($file_ext) != 'php')
$filename .= '.php';
Хорошая альтернатива для eregi()
является preg_match()
с i
модификатор:
if (! preg_match('/.php/i',$fileName))
$filename.='.php';
Попробуйте это, я использую это довольно часто, так как я недавно обновился до PHP 5.
Ранее:
if(eregi('-', $_GET['id'])
{
return true;
}
Теперь я использую это - это работает так же хорошо.
if(preg_match('/(.+)-(.+)/', $_GET['id'])) {
{
return true;
}
Просто замените ваш код следующим, и у вас не должно быть различий в вашем коде. Если вам интересно, почему PHP удаляет eregi(), то это из-за проблем с производительностью, которые возникают при частом использовании, поэтому лучше использовать preg_match(), так как он более специфичен при поиске, поэтому он имеет лучшую производительность и время рендеринга.
Дайте мне знать, как это работает для вас.
Возможно, вам следует рассмотреть возможность рефакторинга вашего кода, чтобы сделать это:
if (substr($fileName, -4, 4) !== '.php')
$fileName .= '.php';
Как указано в других ответах на этот вопрос, eregi('.php')
будет искать что-нибудь, после чего 'php' в файле (не только в конце).
Если вы выбираете "поддельный" eregi, вы должны вызвать уведомление внутри поддельной функции: trigger_error("Некоторый код все еще использует eregi",E_USER_NOTICE); Таким образом, вы легко поймаете забытые вызовы eregi и сможете их заменить.
Я вообще создаю и заканчивается функцией; or other simple string manipulation functions for this kind of stuff.
function endsWith($string, $end){
return substr($string, -strlen($end)) == $end;
}
if (! stristr($fileName, '.php')) $filename.='.php';
у ответчика моффа были параметры в обратном направлении.