簡體   English   中英

PHP中eregi()的良好替代品

[英]Good alternative to eregi() in PHP

我經常發現自己做這樣的快速檢查:

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

但是由於eregi()在PHP 5.3中被棄用,現在代碼會拋出錯誤。

是否有另一個函數的行為與eregi()完全相同? 我對regexp一無所知,也不想學習,所以preg_match()等對我不起作用。

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()好替代方法是帶有i修飾符的preg_match()

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(),因為它在搜索時更具體,因此它具有更好的性能和渲染時間。

讓我知道這對你有什么用。

如果你選擇“假”eregi,你會在假函數內觸發一個通知:trigger_error('有些代碼仍使用eregi',E_USER_NOTICE); 通過這種方式,您可以輕松捕獲被遺忘的eregi電話,並可以替換它們。

也許您應該考慮重構代碼來代替:

if (substr($fileName, -4, 4) !== '.php')
    $fileName .= '.php';

正如在這個問題的其他答案中所述, eregi('.php')將在文件中搜索任何后跟“php”ANYWERE的內容(不僅僅是在結尾處)。

我一般創建和結束功能; 或者這種東西的其他簡單的字符串操作函數。

function endsWith($string, $end){
    return substr($string, -strlen($end)) == $end;
}

if(!stristr($ fileName,'。php'))$ filename。='。php';

莫夫的回答者有倒退的參數。

http://php.net/manual/en/function.stristr.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM