ZIP圧縮ファイルをアップロードできない?(WordPress)

結論:ファイルのアップロード可否は拡張子のホワイトリストで管理されているのですが,WordPressをマルチサイトで運用している場合,このホワイトリストが「サイトネットワーク管理>設定」画面の中で「アップロード可能なファイル形式」として半角スペース区切りの文字列として管理されているのでした.
“zip”はデフォルトではこのリストの中に無いので,ここに追加して「変更を保存」すればOKです.


WordPressはサイト構築のツールとしてよく利用されるのですが,資料としてZIP圧縮したファイルをアップロードしようとしたらアップロード出来なかったのだが,原因判りますかという連絡を頂きました. 普段は画像ファイルくらいしかアップロードしていなかったのでこれまで気が付かなかったとのこと.

「セキュリティ上の理由によりこのファイル形式は許可されていません。」というメッセージが表示されて,ファイルを受け付けてくれないということでした. 試しに手許のWordPressで確認してみたら特に問題無くアップロードできまして,バージョンも最新版なので理由が判りません. 仕方ないのでどこでこのエラーが発生しているのか?を探る事にしました.

多言語用の辞書ファイル(wp-content/languages/にあります)から原文(英語)のエラーメッセージを探し,当エラーメッセージが wp-admin/includes/files.php にて発生していることを突き止め,ここから原因を探しに行きます.

wp_check_filetype_and_ext を探し wp_check_filetype を探し get_allowed_mime_type を探し・・・とプログラムを掘っていくと wp-includes/ms-default-filters.php というファイルの中でアップロード可能なmime typeか否かをチェックするフィルタを定義している箇所に行き着き,このフィルタプログラムが check_upload_mimesというfunctionとして wp-includes/ms-functions.php 内に記述されている事が判りました.

するとここの注意書きに

This function is used to filter that list against the filetype whitelist provided by Multisite Super Admins at wp-admin/network/settings.php.

と書かれていて,なんとマルチサイトで運用している場合には,サイト管理者権限でwhitelistを編集する必要があることが判ったのでした.

手許の環境で試した時はマルチサイト状態では無かったので問題が起こらなかったわけで,マルチサイトの環境で確認したところ確かにwhitelistを編集することでアップロード可否をコントロール出来ることがわかりました. いや〜結構時間かかってしまいました.

ちなみにこの部分,受け取ったwhitelistの文字列を半角スペースで切り出して配列に格納しているので,うっかり半角カンマ等を使うとうまく動作しなくなってしまいます. デフォルトが全て半角スペースになっているので見れば「そういうことか」と判るとは思いますが.

最初ネットを検索してもうまく原因を見つけられなかったので,同じような事でハマっている方の役に立たないとも限らないのでここにメモを残しておきます.


このところ週に二回肩のリハビリに通っているのですが,35分掛けて歩いて行ったら予約は今日じゃなくて明日でした.( ;∀;) 呆然としたまま,また35分歩いて帰ってきました.w

写真はリハビリに向かう途中のものです.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です