[英]Detecting SVG image in PHP
使用 PHP,我想檢查上傳的圖像是否為 jpg、gif、png 或 svg 格式。 我發現 exif_imagetype 函數可以檢查文件格式,但它不支持 svg 格式。 有沒有辦法檢測PHP中的svg格式?
要擴展 Victors 答案,您可以使用mime_content_type('/path/to/file');
(有關該函數,請參閱php.net 手冊)並檢查返回字符串是否等於image/svg+xml
。 就像是:
public function isSvg($filePath = '/path/to/file')
{
return 'image/svg+xml' === mime_content_type($filePath);
}
永遠不要信任文件擴展名來標識文件格式,文件擴展名可能是錯誤的或已更改。 以mimetype為例
$finfo = new finfo(FILEINFO_MIME, "/usr/share/misc/magic");
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"?>
pathinfo($_FILES['File']['name'], PATHINFO_EXTENSION)
盡可能使用內置函數,並僅提取所需的信息(選項 = PATHINFO_EXTENSION)
試試這個——
$extensions= array("jpeg","jpg","png","svg","gif");
$file_ext = strtolower(end(explode('.',$file['name'])));
if(in_array($file_ext,$extensions)=== true){
...
...
}
mime_content_type($filePath);
如果 svg 文件從<svg xmlns="http://www.w3.org/2000/svg" width="210" height="80">
我得到“text/html”開始,請小心
您可以使用函數explode()
和end()
來獲取文件的擴展名,如下所示:
$extention = end(explode('.', $name_of_file));
if ($extention == 'svg')
{
// It's svg image
}
希望對您有幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.