Answers:
在WordPress 4.7.1 中引入了一项更改,用于检查上载文件的真实mime类型。这样会中断上传文件类型,例如SVG或DOCX。WordPress Core中已经存在针对此问题的票证,您可以在其中阅读有关此内容的更多信息:
以下插件是一个临时的建议性解决方法(直到解决此问题为止):
禁用Real MIME Check
如果您不想使用该插件,则可以使用以下相同功能:
add_filter( 'wp_check_filetype_and_ext', function($data, $file, $filename, $mimes) {
global $wp_version;
if ( '4.7.2' !== $wp_version ) {
return $data;
}
$filetype = wp_check_filetype( $filename, $mimes );
return [
'ext' => $filetype['ext'],
'type' => $filetype['type'],
'proper_filename' => $data['proper_filename']
];
}, 10, 4 );
请注意,此片段包含了版本检查,可在WordPress更新后立即禁用此修复程序。
编辑
此问题最初设置为在4.7.2中解决。但是,由于4.7.2是紧急的安全版本,因此该修补程序未纳入该版本。现在应该在4.7.3中进行修复。
'svg' === strtolower($filetype['ext']);
并引入更多工作(如果不需要(主要是)工作或文件不是svg类型)...
似乎没有人刚刚使用过,这太糟糕了,所以这就是我的处理方式...
我在2015年根据CSS-Tricks文章研究了SVG上传器。我还让网格可用于图像预览,并使用了其他一些修复程序。简单插件(IMO文件类型插件应该很简单)
4.7进行了一些更改。真正的PITA是对于image/
MIME类型,WP现在在图像上使用GD。为了绕过这个,我将svg
扩展名设置为使用application/svg+xml
以便GD不会弄乱文件。
更新:从4.7.2开始,在某些情况下也发出了一些耀眼的火花
然后稍后通过挂钩将其热线连接回image/svg+xml
。它与其他答案中的用法相同,但是我们首先将其锁定在特定情况下以消除影响(它是SVG文件);我们可以依靠阅读$data['ext']
(仅通过一个比较和一个数组/哈希访问获得文件信息应该比函数便宜)。
更新:从4.7.2开始$data['ext']
,并不总是设置,因此,如果长度小于1,我们现在使用提取文件名的扩展名(可能不安全)
strtolower(end(explode('.', $filename)))
。我真正使用FileInfo的原因是,基本上依靠PHP扩展太不透明,并且不能总是对所有人都有效(尤其是那些不具有启用扩展名的编译器,如果不存在的话)。我想要一些可以在扩展程序中使用的东西。拥有正确的信息不再是问题,因此对于那些信任输出FileInfo
并具有扩展名的人(我相信它在5.6+中是默认值)应该有效。同样因为这是一个插件,所以它不是在修改内核,因此您可以关闭此代码或注销该钩子。
https://github.com/Lewiscowles1986/WordPressSVGPlugin
看到
允许未经过滤的上载是一个可怕的解决方案,因为正如其他人所说的那样,人们可以通过媒体上载器上载php文件(这很糟糕,如果这样做,您应该停下来想一想!)
强制每个文件通过任何功能而不进行检查(具有讽刺意味的是,如果您具有image/
mime类型,则不能仅进行简单的ext检查)。这可能会产生更广泛的影响,以解决相对利基的问题,并整体上引入更多工作(我的插件也为管理员用户引入了更多工作,以使管理媒体用户界面正常工作)
如果我们将mime保留为application / svg + xml并仅过滤了将要上传的mime类型,但是AFAIK需要将修复程序用作特色图像等。在确保通用SVG体验方面还有很多工作要做,所以我选择了仔细挑选战斗。
希望这可以帮助。
define( 'ALLOW_UNFILTERED_UPLOADS', true );
到wp-config.php
。这对于生产是不安全的。