メディアの追加などからはそのdocxはアップロード可能でしょうか?
WordPerss へのアップロードは何でも可能なわけではなく、許可された拡張子のファイルで、かつ MIME タイプも一致するもの(もしかしたらこれは MW WP Form がやっていることかもしれません…未確認ですみません)しかアップロードできないようになっています。
MW WP Form では独自に psd、ai、eps はアップロードできるようにしていますが、docx は MIME タイプが複数あり、想定外の MIME タイプの docx をアップロードしようとされているのかもしれません。もしその docx ファイルの MIME タイプがわかれば、MW WP Form で独自にアップロード可能なようにアップデートかけることもできるのですが…。
バージョンによる差異でもあるのかと思ったけどよっぽど古くない限り問題ない?(ってかこれgetimagesizeでも一緒なのかな)
http://yuzuemon.hatenablog.com/entry/2014/09/24/025159
コアサーバーなのと(バージョンどうだっけ)WPが古い(?)のが気になるところ……
(WPのバージョンは関係無さそう?)
Toro_Unitさま
ありがとうございます。
メディアの追加からは問題なくアップロードできました。
Takashi Kitajimaさま
ありがとうございます。
MIMEタイプは怪しいと思いましたが、上記のとおりメディアのアップロードでは何も問題なくアップロードができてしまいましたのでMW WP Form関連での問題かと思い投稿させていただきました。
docxファイルは特別なものではなく、Word2010で新規作成した、ひらがなが羅列しているだけのダミーファイルです。ちなみにEXCELファイルもMW WP Formからはアップロードできませんでした。
Hinaloeさま
ありがとうございます。
同一サーバー内に検証用のWordpress(最近のバージョン)がありますので、そちらでも試しましたが結果は変わらずでした。コアサーバーが怪しい気がします。
そうなると MW WP Form の不具合の可能性が高そうですね…。時間があるときに確認してみます。
メディア追加から権限下げたユーザー(投稿者等)でも問題なく投稿できればPHPのバージョンの問題は低くなるはず…(なんならphpinfoでfileinfoの項目で上のリンク先と参照してみてください)
Takashi Kitajimaさま、Hinaloeさま、ありがとうございます。
返信遅くなりすみません。
Takashi Kitajimaさま
あれから更に調査してみたところ、Kitajimaさまブログにて同様の書き込みが見受けられました。
http://2inc.org/blog/2013/06/06/3338/
2014年1月3日のosamuさんの書き込みでファイル形式はxlsxですが、同じ状況と思われます。
お手すきの時で構いませんので、何か分かりましたらご教示ください。
Hinaloeさま
phpinfoでfileinfoを確認しましたら1.0.5-devと表示されていました。
教えていただいたURLと比較してかなり古いバージョンでは?と思われます。
ただ、新たに投稿者を追加しメディア追加を試してみましたが、問題なくdocxファイルのアップロードが完了しました。
検証してみたところ、手元にあった適当なxlsファイルがMW WP Formでアップロードできず、メディアからはアップロードできました(タイプは application/vnd.ms-excel と表示されました)。このとき、下記のコードでコメントつけた (3.2) のところで弾かれていました。PHPバージョン5.3.0以上のときに限って、WordPress自体が判定したMIMEタイプ(wp_check_filetypeの戻り値)とfileinfoの判定結果(finfo::fileの戻り値)が一致するかチェックするコードです。不一致だとアップロードさせてくれないので、このへんに何かありそうですね。
mw-wp-form/classes/functions.php :
if ( version_compare( phpversion(), '5.3.0' ) >= 0 ) {
if ( !file_exists( $filepath ) ) {
// (1)ファイルがないとき
return false;
}
$finfo = new finfo( FILEINFO_MIME_TYPE );
$type = $finfo->file( $filepath );
if ( $finfo === false ) {
// (2)finfoで情報が得られないとき
return false;
}
if ( is_array( $wp_check_filetype['type'] ) ) {
if ( !in_array( $type, $wp_check_filetype['type'] ) ) {
// (3.1)タイプが合わない(MW WP Form側で複数タイプ)
return false;
}
} else {
if ( $type !== $wp_check_filetype['type'] ) {
// (3.2)タイプが合わない(MW WP Form側も単一タイプ)
return false;
}
}
}
return true;
@gblsm さん、詳しく検証頂いてありがとうございます!すっかり忘れていましたが、MW WP Form では finfo でのチェックも加えて二重チェックしていたのでした。確かにこの辺りで何かありそうですね。
@htmchさん
手元に Word がなく、ネットから適当な docx をダウンロードしてテストしたのですがアップロードできてしまいました。もし可能でしたら、
mw-wp-form/classes/functions.php の
$finfo = new finfo( FILEINFO_MIME_TYPE );
$type = $finfo->file( $filepath );
if ( $finfo === false ) {
return false;
}
の部分を
$finfo = new finfo( FILEINFO_MIME_TYPE );
$type = $finfo->file( $filepath );
var_dump( $type );
var_dump( $wp_check_filetype['type'] );
exit;
if ( $finfo === false ) {
return false;
}
のように変更してから docx をアップロードし、表示された結果をお知らせいただけませんでしょうか?
gblsmさま、Takashi Kitajimaさま ありがとうございます。
返信遅くなりまして申し訳ありませんでした。
gblsmさま
検証していただきありがとうございます。
Takashi Kitajimaさま
ご指示のとおりfunction.phpを変更しアップロード後にテストしてみた結果、以下のように表示されました。
string(18) “application/msword” array(2) { [0]=> string(71) “application/vnd.openxmlformats-officedocument.wordprocessingml.document” [1]=> string(15) “application/zip” }
ご確認ください。
よろしくお願いいたします。
ありがとうございます!参考になります。時間を見つけて調査し、アップデートしたいと思います。
「application/msword」は一般的に .doc の拡張子っぽいのですが、 .docx でも「application/msword」の場合がある、ということで修正をいれました。GitHub の develop(開発版)の zip をダウンロードしてお試しいただけると助かります!
https://github.com/inc2734/mw-wp-form/tree/develop