サポート » プラグイン » MW WP Form のファイル添付でdocxがアップロードできない

  • htmch

    (@htmch)


    コアサーバーにてテスト中のサイトで、ファイルアップロード機能付きのメールフォームに使用したいと思いインストールしましたが、目的のWord文書(拡張子docx)がアップロードできず困っています。
    ファイルを選択しても確認画面では何も表示されず、送信してもメールには添付されずサーバー内にもアップロードされていません。
    バリデーションルールで拡張子を指定してもしなくても、またサイズ制限の有無でも変化ありません。ちなみにjpg、pdf、さらには古いWord文書(拡張子がdoc)は問題無くアップロード出来ます。
    Wordpressのバージョンが低いのが原因かと思い新しいバージョンの別サイトで試しましたが同じ結果でしたのでサーバーに起因する問題でしょうか?
    色々調査しましたが原因がわかりません。どなたかお知恵を貸してください。
    よろしくお願いします。

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • メディアの追加などからはそのdocxはアップロード可能でしょうか?

    WordPerss へのアップロードは何でも可能なわけではなく、許可された拡張子のファイルで、かつ MIME タイプも一致するもの(もしかしたらこれは MW WP Form がやっていることかもしれません…未確認ですみません)しかアップロードできないようになっています。

    MW WP Form では独自に psd、ai、eps はアップロードできるようにしていますが、docx は MIME タイプが複数あり、想定外の MIME タイプの docx をアップロードしようとされているのかもしれません。もしその docx ファイルの MIME タイプがわかれば、MW WP Form で独自にアップロード可能なようにアップデートかけることもできるのですが…。

    Hinaloe

    (@hnle)

    バージョンによる差異でもあるのかと思ったけどよっぽど古くない限り問題ない?(ってかこれgetimagesizeでも一緒なのかな)

    http://yuzuemon.hatenablog.com/entry/2014/09/24/025159

    コアサーバーなのと(バージョンどうだっけ)WPが古い(?)のが気になるところ……

    (WPのバージョンは関係無さそう?)

    トピック投稿者 htmch

    (@htmch)

    Toro_Unitさま
    ありがとうございます。
    メディアの追加からは問題なくアップロードできました。

    Takashi Kitajimaさま
    ありがとうございます。
    MIMEタイプは怪しいと思いましたが、上記のとおりメディアのアップロードでは何も問題なくアップロードができてしまいましたのでMW WP Form関連での問題かと思い投稿させていただきました。
    docxファイルは特別なものではなく、Word2010で新規作成した、ひらがなが羅列しているだけのダミーファイルです。ちなみにEXCELファイルもMW WP Formからはアップロードできませんでした。

    Hinaloeさま
    ありがとうございます。
    同一サーバー内に検証用のWordpress(最近のバージョン)がありますので、そちらでも試しましたが結果は変わらずでした。コアサーバーが怪しい気がします。

    そうなると MW WP Form の不具合の可能性が高そうですね…。時間があるときに確認してみます。

    Hinaloe

    (@hnle)

    メディア追加から権限下げたユーザー(投稿者等)でも問題なく投稿できればPHPのバージョンの問題は低くなるはず…(なんならphpinfoでfileinfoの項目で上のリンク先と参照してみてください)

    トピック投稿者 htmch

    (@htmch)

    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ファイルのアップロードが完了しました。

    gblsm

    (@gblsm)

    検証してみたところ、手元にあった適当な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 をアップロードし、表示された結果をお知らせいただけませんでしょうか?

    トピック投稿者 htmch

    (@htmch)

    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

13件の返信を表示中 - 1 - 13件目 (全13件中)
  • トピック「MW WP Form のファイル添付でdocxがアップロードできない」には新たに返信することはできません。