簡體   English   中英

在 PHP 中檢測 SVG 圖像

[英]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");

參見http://www.php.net/manual/en/function.finfo-open.php

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM