【发布时间】:2016-03-24 12:34:07
【问题描述】:
使用 PHP,我想检查上传的图像是 jpg、gif、png 还是 svg 格式。我发现 exif_imagetype 函数可以检查文件格式,但它不支持 svg 格式。有什么方法可以检测 PHP 中的 svg 格式吗?
【问题讨论】:
-
Svg 可能不会被视为图像文件。它是一种基于 XML 的标记语言。
使用 PHP,我想检查上传的图像是 jpg、gif、png 还是 svg 格式。我发现 exif_imagetype 函数可以检查文件格式,但它不支持 svg 格式。有什么方法可以检测 PHP 中的 svg 格式吗?
【问题讨论】:
要扩展 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);
}
【讨论】:
image/svg+xml,而其他文件将只有 image/svg(不含 XML 部分)。这是由于各种工具的申报和出口。所以我同时检查了 SVG:$mimeType = mime_content_type($filePath); return preg_match("/SVG/i", $mimeType);
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"?>
【讨论】:
mime_content_type($filePath);
如果 svg 文件从 <svg xmlns="http://www.w3.org/2000/svg" width="210" height="80"> 开始,请小心
我得到“文本/html”
【讨论】:
pathinfo($_FILES['File']['name'], PATHINFO_EXTENSION)
尽可能使用内置函数,并且 只提取需要的信息(options = PATHINFO_EXTENSION)
【讨论】:
试试这个-
$extensions= array("jpeg","jpg","png","svg","gif");
$file_ext = strtolower(end(explode('.',$file['name'])));
if(in_array($file_ext,$extensions)=== true){
...
...
}
【讨论】: