[英]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';
莫夫的回答者有倒退的參數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.