【问题标题】:Detecting SVG image in PHP在 PHP 中检测 SVG 图像
【发布时间】:2016-03-24 12:34:07
【问题描述】:

使用 PHP,我想检查上传的图像是 jpg、gif、png 还是 svg 格式。我发现 exif_imagetype 函数可以检查文件格式,但它不支持 svg 格式。有什么方法可以检测 PHP 中的 svg 格式吗?

【问题讨论】:

  • Svg 可能不会被视为图像文件。它是一种基于 XML 的标记语言。

标签: php image svg


【解决方案1】:

要扩展 Victors 的答案,您可以使用mime_content_type('/path/to/file');(请参阅php.net manual for the function)并检查返回字符串是否等于image/svg+xml。类似的东西:

public function isSvg($filePath = '/path/to/file')
{
    return 'image/svg+xml' === mime_content_type($filePath);
}

【讨论】:

  • 请注意,某些 SVG 文件将被解码为 MIME image/svg+xml,而其他文件将只有 image/svg(不含 XML 部分)。这是由于各种工具的申报和出口。所以我同时检查了 SVG:$mimeType = mime_content_type($filePath); return preg_match("/SVG/i", $mimeType);
【解决方案2】:
mime_content_type(realpath('img/logo.svg'));

返回"image/svg+xml"。 您的 svg 文件必须在第一行包含<xml> 标记,如此处所述https://stackoverflow.com/a/46366819,类似于<?xml version="1.0" encoding="iso-8859-1"?>

【讨论】:

    【解决方案3】:
    mime_content_type($filePath);
    

    如果 svg 文件从 <svg xmlns="http://www.w3.org/2000/svg" width="210" height="80"> 开始,请小心 我得到“文本/html”

    【讨论】:

      【解决方案4】:
      pathinfo($_FILES['File']['name'], PATHINFO_EXTENSION)
      

      尽可能使用内置函数,并且 只提取需要的信息(options = PATHINFO_EXTENSION)

      【讨论】:

      • 请记住,该检查不可信。例如。如果用户确实上传了该文件,则在许多情况下,用户可以轻松更改文件扩展名。
      【解决方案5】:

      试试这个-

      $extensions= array("jpeg","jpg","png","svg","gif");    
      $file_ext       = strtolower(end(explode('.',$file['name'])));
      if(in_array($file_ext,$extensions)=== true){
          ...
          ...
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-03
        • 2018-03-04
        • 2010-09-16
        • 2011-05-02
        • 1970-01-01
        • 2015-08-16
        相关资源
        最近更新 更多