今まで何でもなかったのに、突然WordPressでファイルをアップロードしようとすると
「このファイルタイプはセキュリティの観点から許可されていません。」
とエラーが出てファイルがあげられなくなりました。
やっていたことといえばmp4ファイルをWPにアップロードなんですけど、違い的には変換するツールを変えてました。
早速Google先生に聞いてみたところ、アップロードできない原因と対策は以下のサイトなどが参考になりました。
【WordPress】このファイルタイプはセキュリティの観点から許可されていません。 at softelメモ
このファイルタイプはセキュリティの観点から許可されていません。
原因と対策は別として、同じmp4なのに変換したツールによってアップロードできたりできなかったしたので「そんなことあるの?」と思って調べてみました。
事象整理
WordPressのバージョンによって、アップロードできるファイルの種類が変更になった。(仕変)
その影響を受けてあげられなくなった様子。
アップロードするファイルは同様にmp4。
新しい変換ツールを通したmp4はだめ。昔から使っていた変換ツールを通したmp4だったらOK。
結論:MINEタイプの違いが影響
最初、codecが違うのかな?とかbitrateとか影響するの?とかいろいろと調べましたが、動画のサイズもcodecも音声情報もffmpegで見ると全く一緒。見た目もmp4として一緒。
じゃぁ何が違うの?と困っていたところ
「そういえば、fileコマンドを使えばファイルのタイプが見れたな」
ってのを思い出しました。
【 file 】 ファイル・タイプを判定する | 日経クロステック(xTECH)
早速、作った動画をLinuxに転送して、fileコマンドで出来上がったmp4を確認してみました。
従来の変換ツールのもの
[yatta47@localhost aaaa]$ file current.mp4 current.mp4: ISO Media, MPEG v4 system, version 1
新しい変換ツールのもの
[yatta47@localhost aaaa]$ file new.mp4 new.mp4: ISO Media
「MPEG v4 system, version 1」が付いてない!!!
そしてfileコマンドにオプションとして -i
を付けるとMINEタイプが見れるということだったのでつけてみて実行。
従来の変換ツールのもの
[yatta47@localhost aaaa]$ file -i current.mp4 current.mp4: video/mp4; charset=binary
新しい変換ツールのもの
[yatta47@localhost aaaa]$ file -i new.mp4 new.mp4: application/octet-stream; charset=binary
なんか全然違う!!これか!!
新しいツールで作ったほうはMINEタイプが application/octet-stream
と不思議なMINEタイプになっている。
なにこれ?と思って調べてみたところ
アプリケーションが何か判断できないとき、またはそのアプリケーション独自のファイル・タイプ?であるため判別できない場合も使われる。
参考: http://onlineconsultant.jp/pukiwiki/?application%2Foctet-stream
とのこと。
作成されたファイルは拡張子はmp4だけれど、MINEタイプとしては application/octet-stream
と少なくとも動画ファイルっぽくない。
なるほどなるほど。
で、次はWP側で application/octet-stream
のアップロードが許可されているかというのを確認。
以下のサイトにあるDefault allowed mime typesを確認してみると application/octet-stream
は見つからず。
Function Reference/get allowed mime types « WordPress Codex
これが原因っぽい。
まとめ
根本問題としては、
新しい変換ツールのほうはMINEタイプを video/mp4
ではなく application/octet-stream
でmp4を作っている
ということ。
で、WP側も
MINEタイプ application/octet-stream
のアップロードは許可されていない
というところ。
この2つが重なって結果、同じmp4ファイルでもアップロードできたりできなかったりという事象につながっていたのだなと判明。
WPは拡張子だけじゃなくてMINEタイプでファイルアップロードの判別もしてるんだなーというのも知らなかった。
まだわからないこと
fileの結果として出てきた「ISO Media」と「ISO Media, MPEG v4 system, version 1」って何が違うのだろう?とか、WPのバージョンだとどのバージョンではどうなっているとか明確につかんでおきたいとか知っておきたいことはいくつかある。
今回はここまで。
動画を扱うことは多くても仕組みは全然理解していないなーというのを痛感した。(´;ω;`)
それではー。