1

我写了这个函数:

function isImage($url)
  {

     $params = array('http' => array(
                  'method' => 'HEAD'
               ));
     $ctx = stream_context_create($params);
     $fp = @fopen($url, 'rb', false, $ctx);
     if (!$fp) 
        return false;  // Problem with url

    $meta = stream_get_meta_data($fp);
    if ($meta === false)
    {
        fclose($fp);
        return false;  // Problem reading data from url
    }

    $wrapper_data = $meta["wrapper_data"];
    if(is_array($wrapper_data)){
      foreach(array_keys($wrapper_data) as $hh){
          if(substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19 
          {
            fclose($fp);
            return true;
          }
      }
    }

    fclose($fp);
    return false;
  }

它确实检查 url 是否返回图像类型,现在我想扩展此方法来控制返回的图像的扩展名是否在数组中('png'、'jpeg'、'jpg')。

我需要这个控制,因为用户在我的应用程序上提交图像 url。

任何建议都会被采纳!

4

5 回答 5

1

检查“Content-Type”标头是否为以下之一:

  1. 内容类型:图片/png
  2. 内容类型:图像/JPEG
  3. 内容类型:图片/jpg

或者

检查$url参数是否以“.png”、“.jpg”或“.jpeg”结尾

于 2012-11-09T14:55:01.593 回答
1

如果我说得对,此代码段可以为您提供帮助:

$info  = getimagesize("http://www.gravatar.com/avatar/701467343cbd095506ca24b1ee5406d8?s=128&d=identicon&r=PG");
echo $info['mime'];
于 2012-11-09T14:58:49.093 回答
1

此代码段将返回图像类型以及检查它是否是图像:

    function get_type ($url) {

    $mimes = array (    'bmp'   =>  array('image/bmp', 'image/x-windows-bmp'),
                    'gif'   =>  'image/gif',
                    'jpeg'  =>  array('image/jpeg', 'image/pjpeg'),
                    'jpg'   =>  array('image/jpeg', 'image/pjpeg'),
                    'jpe'   =>  array('image/jpeg', 'image/pjpeg'),
                    'png'   =>  array('image/png',  'image/x-png')
            ) ;

    $info  = getimagesize($url);

    //$info['mime'] = 'image/gif';

    if ($info['mime']) {
        if ($type = array_search ($info ['mime'],$mimes)) 
            return $type;
        else {
            foreach ($mimes as $key=>$value) {
                if (is_array ($value) ) {
                    if ( !( FALSE === array_search ($info['mime'] , $value ) ))
                        return $key;
                }
            }
        }//end of else
    }
    else return "Not an image";

}

如果你用 this 调用这个函数:

echo get_type("http://www.gravatar.com/avatar/701467343cbd095506ca24b1ee5406d8?s=128&d=identicon&r=PG");

它会返回png

如果你用这个 url 打电话:

echo get_type("http://www.google.com");

它会返回Not an image

希望有帮助。快乐编码:)

于 2012-11-09T15:32:06.710 回答
0

我个人更preg_match喜欢这样的:

    $allowed_file_types = "(jpg|jpeg|gif|bmp|png)";
    if(preg_match("/\." . $allowed_file_types . "$/i", 'image.jpg'))
    {
         // The file extention is allowed
    }
    else
    {
        // Not allowed!
    }
于 2012-11-09T15:03:52.957 回答
0

要从某个 url 获取有关文件的信息,您可以使用以下代码:

<?php
//the request
$ch = curl_init('http://www.google.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

// get the content type
echo curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
?>

将输出:文本/html;字符集=ISO-8859-1

于 2012-11-09T15:09:29.773 回答