11

我需要验证字符串是否是图像文件名。

$aaa = 'abskwlfd.png';

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

我怎么做?它会检查 100 张图像,所以应该很快。我知道有一种文件类型验证方法,但我认为这很慢.. preg_match 怎么样?它更快吗?我不擅长 preg_match。

先感谢您。

4

7 回答 7

36

尝试这个:

<?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';
}
?>
于 2013-08-07T05:36:24.203 回答
13

试试这个代码,

if (preg_match('/(\.jpg|\.png|\.bmp)$/i', $aaa)) {
   echo "image";
} else{
   echo "not image";
}
于 2013-08-07T05:46:23.010 回答
4

也许你正在寻找这个:

function isImageFile($file) {
    $info = pathinfo($file);
    return in_array(strtolower($info['extension']), 
                    array("jpg", "jpeg", "gif", "png", "bmp"));
}
  • 我正在使用pathinfo检索有关文件的详细信息,包括扩展名。
  • strtolower用来确保扩展名将匹配我们支持的图像列表,即使它是在不同的情况下
  • 用于in_array检查文件扩展名是否在我们的图像扩展名列表中。
于 2013-08-07T05:52:56.427 回答
2

尝试这个

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

strrcr它需要最后一次出现的字符串.. 或者其他一些概念。

$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函数

于 2013-08-07T05:43:16.803 回答
1

尝试这个:

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

var_dump($a['extension']);//returns exe
于 2013-08-07T05:41:44.440 回答
0

尝试这个

使用路径信息():

$ext = pathinfo($file_name, PATHINFO_EXTENSION); case sensitive
if (in_array($ext, $supported_image)) {
    echo "it's image";
} else {
    echo 'not image';
}
于 2013-08-07T05:38:12.807 回答
0

是的,正则表达式是要走的路。或者,您可以拆分"."并检查返回数组中的最后一个元素与图像扩展数组。我不是 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

如果你想匹配任何序列,而不是括号和 + 中的内容,只需使用:

.*

“。” 匹配任何字符,“*”表示任意数量。所以这基本上只是说“没有限制”(换行符除外)

正如您在评论中看到的那样,我可能还缺少很多其他东西。只需阅读这些,查看正则表达式参考,就可以了。

于 2013-08-07T05:37:03.120 回答