Подтвердить что ты не робот

Хорошая альтернатива eregi() в PHP

Я часто обнаруживаю, что делаю быстрые проверки следующим образом:

if (!eregi('.php', $fileName)) {
    $filename .= '.php';
}

Но поскольку eregi() устарел в PHP 5.3, код теперь вызывает ошибки.

Есть ли другая функция, которая ведет себя точно так же, как eregi()? Я ничего не знаю о регулярных выражениях и не хочу учиться, поэтому preg_match() и т.д. Не будут работать для меня.

4b9b3361

Ответ 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;
}