1
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

WordPressでファイルアップロードができない(m4b、m4a、vtt、key)

概要

  • WordPressで特定のファイルがアップロードできない
  • 「セキュリティ上の理由で」と表示される
  • ある時からアップロードできない

原因

WordPress 5.0.1以上

ファイルチェックが厳格になったらしい。以下のようなコードを通じて得られた「正しいmime type」と比較して、アップロードを制御するようになった。その結果、拡張子はあっていても、本当のファイル形式?が違うとアップロードさせない。

$finfo = finfo_open( FILEINFO_MIME_TYPE );
$real_mime = finfo_file( $finfo, $file );

ファイル形式が複数存在する

上記の問題を解決するには、シンプルに以下のように書く(functions.phpとかに)。例えば、mp3, m4a, m4b が mpeg だけど、ちょっと違うことがある。AudioBook Binder (Mac)で作成したファイルは、 video/mp4 となってしまう。

add_filter( 'upload_mimes', function ( $mime_types ) {
    unset( $mime_types[ 'mp3|m4a|m4b' ] );

    $mime_types[ 'mp3' ] = 'audio/mpeg';
    $mime_types[ 'm4a' ] = 'audio/mpeg';
    $mime_types[ 'm4b' ] = 'video/mp4';

    return $mime_types;
} );

一見解決したように見えるが、 AudioBook Builder (Mac) で m4b を作成すると、audio/x-m4a という形式になってしまう。つまり、同じ拡張子で複数のmime type が存在する。

このような状況に対して、WordPressでは簡単に解決する方法は用意されていないらしい。wp_check_filetype_and_ext でごちゃごちゃすると良いらしい。

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
1
Help us understand the problem. What are the problem?