亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查數組元素中是否存在禁止擴展

檢查數組元素中是否存在禁止擴展

PHP
長風秋雁 2023-10-01 17:06:02
我想檢查數組元素中是否有任何禁止的擴展。怎么做?$allowed_types = array('jpg', 'jpeg');Array(   [0] => C:/xampp/htdocs/blog/media/images/1597335125_1.jpg   [1] => C:/xampp/htdocs/blog/media/images/1597335125_2.jpg   [2] => C:/xampp/htdocs/blog/media/images/1597335125_3.jpg   [3] => C:/xampp/htdocs/blog/media/images/1597335125_4.jpg   [4] => C:/xampp/htdocs/blog/media/images/1597335125_5.png)
查看完整描述

3 回答

?
慕村225694

TA貢獻1880條經驗 獲得超4個贊

有多種方法,您可以使用pathinfo()例如如下所示:


$allowed_types = array('jpg', 'jpeg');


$files = [

   "C:/xampp/htdocs/blog/media/images/1597335125_1.jpg",

   "C:/xampp/htdocs/blog/media/images/1597335125_2.jpg",

   "C:/xampp/htdocs/blog/media/images/1597335125_3.jpg",

   "C:/xampp/htdocs/blog/media/images/1597335125_4.jpg",

   "C:/xampp/htdocs/blog/media/images/1597335125_5.png",

];


$not_allowed_files = array_filter($files, function($var) use ($allowed_types) {

    $path_info = pathinfo($var);

    return !in_array($path_info['extension'], $allowed_types);

});


查看完整回答
反對 回復 2023-10-01
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

通常,我拒絕回答不包括編碼嘗試的問題,但我不得不在這種情況下插話,因為已經提供了次優/不正確的建議,我想幫助未來的研究人員。

應避免正則表達式,除非它提供了寶貴的優勢——這就是其中之一。我的代碼片段只需要兩次函數調用,而不是 2n+1 次函數調用。

使用在正則表達式中表示“OR”的管道內爆列入白名單的擴展值。將管道分隔的字符串括在括號中以包含邏輯,在末尾寫入 a$來要求擴展值僅在字符串末尾匹配。使用i模式修飾符使整個模式不區分大小寫。由于您的數組值僅包含字母字符,因此無需調用preg_quote()來提供轉義斜杠。

代碼:(演示

$allowed_types = ['jpg', 'jpeg'];


$files = [

? ?"C:/xampp/htdocs/blog/media/images/1597335125_1.jpg",

? ?"C:/xampp/htdocs/blog/media/images/jpeg_2.gif",

? ?"C:/xampp/htdocs/blog/media/images/1597335125_3.jpeg",

? ?"C:/xampp/htdocs/blog/media/images/1597335125_4.jpg",

? ?"C:/xampp/htdocs/blog/media/images/jpg_5.png",

];


if ($disallowed = preg_grep('/(' . implode('|', $allowed_types) . ')$/i', $files, PREG_GREP_INVERT)) {

? ? var_export($disallowed);

}

輸出:


array (

? 1 => 'C:/xampp/htdocs/blog/media/images/jpeg_2.gif',

? 4 => 'C:/xampp/htdocs/blog/media/images/jpg_5.png',

)

如果沒有括號,“字符串結尾”$將僅適用于管道分隔字符串中的最終擴展名,并使模式不正確。

如果您不需要白名單數組是動態的,您可以將正則表達式硬編碼為:

/jpe?g$/i

如果您通過目錄掃描或glob()調用生成文件的輸入數組,那么您應該使用glob()的過濾功能。檢查 php 手冊。


要僅檢查任何文件是否具有最佳性能o(小 o)的無效擴展名,請使用foreach()帶有條件的經典循環break。

代碼:(演示

$hasInvalidFile = false;

foreach ($files as $file) {

? ? if (!in_array(pathinfo($file, PATHINFO_EXTENSION), $allowed_types)) {

? ? ? ? $hasInvalidFile = true;

? ? ? ? break;

? ? }

}

var_export($hasInvalidFile);


查看完整回答
反對 回復 2023-10-01
?
繁星coding

TA貢獻1797條經驗 獲得超4個贊


這將連接$allowed_typesOR 運算符|并檢查擴展名并返回不匹配的數組:


if(preg_grep('/'.implode('|', $allowed_types).'$/i', $array, PREG_GREP_INVERT)) {

    // disallowed file types

}

在您的示例中,它將返回那些不匹配的內容,jpg|jpeg$這意味著:


匹配字符串末尾的jpgORjpeg$

i結束后的字母/是大寫還是小寫(i如果需要,可以刪除)

如果您確實想知道哪些不匹配,那么:


if($bad = preg_grep('/'.implode('|', $allowed_types).'$/i', $array, PREG_GREP_INVERT)) {

    print_r($bad);

}

然后$bad將包含不匹配的條目。


查看完整回答
反對 回復 2023-10-01
  • 3 回答
  • 0 關注
  • 127 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號