/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

WordPressで動画ファイルがアップロードできなくなった

今まで何でもなかったのに、突然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のバージョンだとどのバージョンではどうなっているとか明確につかんでおきたいとか知っておきたいことはいくつかある。

今回はここまで。

動画を扱うことは多くても仕組みは全然理解していないなーというのを痛感した。(´;ω;`)

それではー。