Хорошая альтернатива eregi() в PHP
Я часто обнаруживаю, что делаю быстрые проверки следующим образом:
if (!eregi('.php', $fileName)) {
$filename .= '.php';
}
Но поскольку eregi()
устарел в PHP 5.3, код теперь вызывает ошибки.
Есть ли другая функция, которая ведет себя точно так же, как eregi()
? Я ничего не знаю о регулярных выражениях и не хочу учиться, поэтому preg_match()
и т.д. Не будут работать для меня.
Ответы
Ответ 1
stristr достигает точно такого же результата, как eregi (по крайней мере, когда вы не используете регулярные выражения):
if (!stristr($fileName, '.php'))
$filename.='.php';
Вы также можете сделать "поддельный" eregi следующим образом:
if (!function_exists('eregi')) {
function eregi($find, $str) {
return stristr($str, $find);
}
}
Обновить. Обратите внимание, что stristr
не принимает регулярные выражения как eregi
, а для этого конкретного случая (проверяя расширение) вам лучше пойти с решением vartec.
Ответ 2
Конечно, вы знаете, что это не делает то, что вы ожидаете от этого?
В regexp '.' означает любой символ, поэтому eregi('.php',$fileName)
означает имя файла с любым символом, за которым следует "php". Таким образом, например, "blabla2PHP.txt" будет соответствовать вашему регулярному выражению.
Теперь, что вы хотите сделать, это следующее:
$file_ext = pathinfo($filename, PATHINFO_EXTENSION);
if(strtolower($file_ext) != 'php')
$filename .= '.php';
Ответ 3
Хорошей альтернативой для eregi()
является preg_match()
с модификатором i
:
if (! preg_match('/.php/i',$fileName))
$filename.='.php';
Ответ 4
Попробуйте это, я использую это довольно много, так как недавно обновился до PHP 5.
Ранее:
if(eregi('-', $_GET['id'])
{
return true;
}
Теперь я использую это - он работает так же хорошо.
if(preg_match('/(.+)-(.+)/', $_GET['id'])) {
{
return true;
}
Просто замените свой код следующим, и у вас не должно быть никаких ограничений в вашем коде. Если вам интересно, почему PHP удаляет eregi() из-за проблем с производительностью, которые он имеет при использовании много, поэтому лучше использовать preg_match(), поскольку он более специфичен в поиске, поэтому он имеет лучшую производительность и время рендеринга.
Сообщите мне, как это работает для вас.
Ответ 5
Если вы идете на "фальшивый" eregi, вы сожжете триггерное уведомление внутри поддельной функции:
trigger_error ( "Некоторый код все еще использует eregi", E_USER_NOTICE);
Таким образом, вы легко поймете забытые звонки ереги и можете их заменить.
Ответ 6
Возможно, вам стоит подумать о том, чтобы сделать рефакторинг вашего кода:
if (substr($fileName, -4, 4) !== '.php')
$fileName .= '.php';
Как указано в других ответах на этот вопрос, eregi('.php')
будет искать что-либо, за которым следует "php" ANYWERE в файле (не только в конце).
Ответ 7
Я вообще создаю и концы с функцией; или другие простые функции манипуляции с строками для такого рода материалов.
function endsWith($string, $end){
return substr($string, -strlen($end)) == $end;
}
Ответ 8
if (! stristr ($ fileName, '.php')) $ Имя_файла = 'PHP.';.
Функция moff answser имела параметры назад.
http://php.net/manual/en/function.stristr.php