ワードプレスのメディアにアップロード出来ない時の解決方法まとめ

本番サイトで、寄稿者権限のコンテンツライターさんに記事を直接下書き納品してもらう事があります。

その時、メディアのアップロードが出来ないと連絡をいただきました。

運営者として自分でコンテンツを追加する時は、ローカル開発環境のVCCWで問題が無かった為に気付いていませんでした。

本番サイトの環境はKUSANAGIです。

この記事は、VPSのconoha KUSANAGI Nginx php-fpmの本番環境にwindowsパソコンでFileZillaやTeraTermを使ってssh接続した例で説明しています。

※サーバーによってディレクトリ構造が異なる場合がありますが、Linuxを採用しているレンタル共有サーバー等であれば参考にしていただくことが出来ます。

※Windowsのフォルダは、概ねLinuxでディレクトリと言われます。

ディレクトリのアクセス権についてエラー文章が出る

本番サイトでワードプレスのメディアに画像ファイルをアップロードしようとしたら出来ない!

という時、下記の様なメッセージがダッシュボード画面の下部に出てくることがある思います。

ディレクトリ wp-content/uploads/2016/10 を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?

英語の場合

Unable to create directory wp-content/uploads/2016/10. Is its parent directory writable by the server?

ワードプレスでは比較的に起こりやすい問題ではないでしょうか。

 

パーミッション755と再帰的で解決

recursive-permission-settings

パーミッションとは?

UNIX 系の OS で、ディレクトリやファイルに対する アカウント ごとのアクセス権のことをいいます。他の系列のOSにも同様のアクセス権が設定できるものもありますが、パーミッションと呼ぶ場合は一般にUNIX系のOSに限られます。

お便利サーバー.comより引用。やや強引ですがLinux≒UNIXと考えてください。

手元のパソコンがwindowsの方は、FileZilla等でLinuxのサーバーに接続を行ってください。

そして、

/home/kusanagi/任意のプロファイル・ディレクトリ名/DocumentRoot/wp-content/uploads

のuploadsの上で右クリック⇒「ファイルの属性」をクリックします。

上記の様な「ファイルの属性を変更」の小さなウィンドウが出てきたら、①の様にパーミッション数値を755に変えます。

②「サブディレクトリの中の再帰」にチェックを付けて、「すべてのファイルとディレクトリに適用」にもチェックを入れます。

最後に「OK」をクリックしてください。

ポイントは「再帰的(さいきてき)」です。upoloadsディレクトリの中にある全てのファイルとディレクトリの権限を755に変えるという事になります。

再帰的を指定しないとuploadsディレクトリだけ755になり、ディレクトリ内のものがすべてパーミッション変更されません。

uploads/2016/10など、ディレクトリが深層まであるので、再帰的にパーミッションを設定してください。

wp-contentでパーミッション変更をしない

メディアのアップロードだけの問題なのに、wp-contentでパーミッション変更をする事はやめましょう。

セキュリティリスクが無駄に増えます。

パーミッション制限範囲の緩和は最小限に抑える事がセキュリティの基本です。

パーミッション変更Linuxコマンド

FileZillaを使わない場合、TeraTermやCygwin等で本番環境に接続して、nginxの動作ユーザーでコマンド操作していることを確認して以下のコマンドを使います。

※SELinuxではコマンドが異なる様です。

windows serverのIISやLinuxのubuntuでもユーザーやパーミッションの設定状態により同じ問題が起こる様です。

ubuntuは詳しくわかりませんが、IISの場合、windowsのGUI操作でコマンド無しで簡単にパーミッション設定を出来た記憶があります。

解決できない場合

ファイルの容量制限機能が働いている

画像の容量を増減しながらアップロードを試してみてください。

1KB(キロバイト)=1024バイト
1MB(メガバイト)=1024KB
1GB(ギガバイト)=1024MB
1TB(テラバイト)=1024GB

phpで画像の転送容量に制限がかかっている
php.iniファイルで調整します。
vimというコマンド画面内専用のエディタ(windowsのメモ帳の様なもの)で書き換えを行います。
やや難しいですが「vimコマンド 使い方」などで検索すると出てきます。
※php.iniファイルの変更後は、必ず再起動をしてください。

レンタル共有サーバーの場合、php.iniファイルの設定はサーバーコントロールパネルなどの中から行う為、vimやコマンド操作の必要が無い場合もあります。
nginxでpostサイズ制限がかかっている
/etc/nginx/conf.d/default.confあたりでclient_max_body_sizeの数値を確認
※defaultの部分は、サーバー設定者によって自由に命名されている可能性があります。

ご参考としてKUSANAGIのデフォルトは16メガバイトです。
client_max_body_sizeを含んだファイル名がdefault.confの場合

上記の設定ファイルで数値の書き換えで対応します。

その他原因

/wp-admin/includes/image.phpのファイルが壊れている
ファイルを修復しましょう。
image.phpファイルの容量がゼロになっていないか確認したり、同じバージョンのワードプレスを新たにダウンロードして壊れていないか見比べてみてください。
ソースコードの差分確認はwindowsの場合、WinMergeが使いやすくてお勧めです。
※diffコマンドなどでも確認出来ます。
php.iniファイルのセーフモード
offにする
セーフモードとは?

プログラムファイルの所有者が、プログラム内の関数によって処理されているファイル及びディレクトリの所有者と同一かの確認を行う設定をします。

Xサーバーより引用

※php.iniファイルの変更後は、必ず再起動をしてください。

メディアの格納先パスの確認
コア(ワードプレス本体)のバージョンが3.4以下の場合、格納先パスの変更が出来るので/wp-content/uploadsに変更する
プラグインやテーマに原因がある
1つずつプラグインを無効化したり、テーマを変えてみてください。
VCCWデフォルトのプラグイン「Dynamic Hostname」が原因という事もある様です。
SELinuxを使っている
セキュリティ的に非推奨ですが、SELinuxをoffにする方法があります。
SELinuxを使われている場合、エンタープライズでセキュリティ対策の為にわざわざ利用している可能性もあると思います。
そのため、offではなく正しい方法を学習しないとまずい状況という可能性もあると思います。
SELinuxを導入した理由を知っている人にoffにしていいかどうか?確認することをお勧めします。

修正を外注する場合

ワードプレスでメディアのアップロードが出来ない場合、多くの原因が考えられます。

ワードプレス本体/テーマ/プラグイン/サーバー(apacheやnginx)/phpなど、多種多様です。

メディアのエラーメッセージは、ダッシュボードで「設定」⇒「一般」⇒「サイトの言語」で日本語と英語に変更できます。

「表示される英語のエラーメッセージ」と「どこまで自分で検証したのか」を正しく専門業者に伝える事で解決までの時間が速くなります。

 

コメントを残す