web-dev-qa-db-ja.com

php-文字列が画像拡張子で終わっているかどうかを確認します

文字列が画像ファイル名かどうかを確認する必要があります。

$aaa = 'abskwlfd.png';

if ($aaa is image file) {
echo 'it's image';
else {
echo 'not image';
}

それ、どうやったら出来るの? 100枚の画像をチェックするので、高速である必要があります。ファイルタイプの検証方法があることは知っていますが、それは遅いと思います。preg_matchはどうですか?速いですか? preg_matchが苦手です。

前もって感謝します。

8
newworroo

これを試して:

<?php
$supported_image = array(
    'gif',
    'jpg',
    'jpeg',
    'png'
);

$src_file_name = 'abskwlfd.PNG';
$ext = strtolower(pathinfo($src_file_name, PATHINFO_EXTENSION)); // Using strtolower to overcome case sensitive
if (in_array($ext, $supported_image)) {
    echo "it's image";
} else {
    echo 'not image';
}
?>
31
Manoj Yadav

このコードを試してください、

if (preg_match('/(\.jpg|\.png|\.bmp)$/i', $aaa)) {
   echo "image";
} else{
   echo "not image";
}
12

多分あなたはこれを探しています:

function isImageFile($file) {
    $info = pathinfo($file);
    return in_array(strtolower($info['extension']), 
                    array("jpg", "jpeg", "gif", "png", "bmp"));
}
  • pathinfoを使用して、拡張子を含むファイルに関する詳細情報を取得しています。
  • strtolowerを使用して、拡張子がサポートされている画像のリストと一致するようにしています。
  • in_arrayを使用して、ファイル拡張子が画像拡張子のリストに含まれているかどうかを確認します。
2
invisal

これを試して:

$a=pathinfo("example.exe");

var_dump($a['extension']);//returns exe
1
Sivasailanathan

これを試して

 $allowed = array(
    '.jpg',
    '.jpeg',
    '.gif',
    '.png',
    '.flv'
    );
   if (!in_array(strtolower(strrchr($inage_name, '.')), $allowed)) {
     print_r('error message');
    }else {
       echo "correct image";
    }

または strrchr 文字列の最後の出現を取ります。それ以外の場合は他の概念。

$allowed = array(
                'image/jpeg',
                'image/pjpeg',
                'image/png',
                'image/x-png',
                'image/gif',
                'application/x-shockwave-flash'
                        );
        if (!in_array($image_name, $allowed)) {
         print_r('error message');
        }else {
           echo "correct image";
        }

ここでは、 [〜#〜] strtolower [〜#〜] 関数を使用でき、 in_array 関数も使用できます

1
VIVEK-MDU

はい、正規表現が最適です。または、_"."_を分割して、返された配列の最後の要素を画像拡張子の配列と照合することもできます。私はPHPの人ではないので、コードを書くことはできませんが、正規表現を書くことはできます。

^[a-zA-Z\.0-9_-]+\.([iI][mM][gG]|[pP][nN][gG]|etc....)$

これはかなり簡単です。正規表現の経験があまりないことは知っていますが、これが行うことは次のとおりです。

_^: start of string
[a-zA-Z\.0-9_-]: describes range of characters including all letters, numbers, and ._-
\.: "." character
([iI][mM][gG]|[pP][nN][gG]|etc....): | means or. So just put all image extensions you know here. Again, the brackets for case-insensitivity
_

任意のシーケンスに一致させたい場合は、角かっこと+の代わりに、次を使用します。

_.*_

「。」任意の文字に一致し、「*」はその任意の量を意味します。つまり、これは基本的に「制限なし」と言っています(改行を除く)

コメントでわかるように、おそらく私が見逃しているものは他にもたくさんあります。それらを読んで、正規表現のリファレンスを見てください。そうすれば大丈夫です。

0
user2652246

これを試して

使用 pathinfo():

$ext = pathinfo($file_name, PATHINFO_EXTENSION); case sensitive
if (in_array($ext, $supported_image)) {
    echo "it's image";
} else {
    echo 'not image';
}
0
Nathan Srivi