(PHP)如何验证.svg(文件上传)

时间:2018-02-18 10:11:39

标签: php svg getimagesize

我在验证文件上传时遇到问题。

为确保用户上传有效图片(不是扩展名为.jpg或.png的文件,...),可以使用getimagesize()。例如:W3school

但是.svg文件怎么样?当我使用getimagesize()时,函数print_r()不会返回任何内容。我怎么能确定用户上传.svg文件,而不是扩展名为.svg(virus.svg)的文件?

1 个答案:

答案 0 :(得分:-1)

如果您可以使用外部脚本,则可以使用 SVG Sanitize 包:https://packagist.org/packages/enshrined/svg-sanitize

虽然其主要目的是卫生,但作为该过程的副产品,它还将确保您的 SVG 有效。

use enshrined\svgSanitize\Sanitizer;

// Create a new sanitizer instance
$sanitizer = new Sanitizer();

// Load the dirty svg (if it's an SVG file)
$dirtySVG = file_get_contents('filthy.svg');

// if it's a base64 encoded string, you can alternatively use the following
$base64_str = str_replace('data:image/svg+xml;base64,', '', $b64_string);
$base64_str = str_replace(' ', '+', $base64_str);
$dirtySVG = base64_decode($base64_str);

// Pass it to the sanitizer and get it back clean
if(!$cleanSVG = $sanitizer->sanitize($dirtySVG)){
    //if this fails, the SVG was not valid.
}

// Now do what you want with your validated and clean SVG/XML data