誰もが何をしているのかだけで働いているようではなく、それはあまりにも悪いので、ここで私が扱った方法は...
歴史/背景
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']
(1回の比較と1回の配列/ハッシュアクセスとしてファイル情報を取得するには、関数よりも安価である必要があります)。
アップデート: 4.7.2のよう$data['ext']
常にセットされていない、今の長さは、使用して、ファイル名から<1つの抽出物(潜在的に危険な)拡張子がある場合、私たちはそう
strtolower(end(explode('.', $filename)))
。私がFileInfoを使用して実際に戦っている理由は、基本的にPHP拡張機能に依存することは不透明すぎて、すべての人にとって常に機能するとは限らないことです(特に、拡張機能がない場合は、拡張機能を有効または無効にコンパイルする場合はそうではありません)。拡張機能の範囲内で機能するものが欲しい。正しい情報を持っていることはもはや問題ではないので、出力を信頼しFileInfo
、拡張子を持っている人(5.6+ではデフォルトだと思います)が機能するはずです。また、これはプラグインであるため、コアを変更することはないため、このコードをオフにしたり、フックを登録解除したりできます。
https://github.com/Lewiscowles1986/WordPressSVGPlugin
見る
その他の回避策
フィルタリングされていないアップロードを許可することは恐ろしい解決策です。他の人がこのスレッドにリンクすると言ったように、人々はメディアアップローダーを介してPHPファイルをアップロードできるからです(それは悪いことです。
チェックなしですべてのファイルを関数に強制します(皮肉なことimage/
に、MIMEタイプを使用している場合、単純なextチェックを使用することはできません)。これにより、比較的ニッチな問題を解決するためにはるかに広い範囲の効果を作成する可能性があり、全体的な作業が増えます(プラグインは、管理ユーザーが管理メディアUIを機能させるための作業も多くなります)
mimeをapplication / svg + xmlのままにして、mimeタイプを単純にフィルタリングすると、画像はアップロードされますが、機能イメージなどとして使用するには修正が必要になります。慎重に戦いを選びます。
お役に立てれば。
define( 'ALLOW_UNFILTERED_UPLOADS', true );
しwp-config.php
ます。これは本番環境では安全ではありません。