コアサーバー上のWordPressでメディアをアップロードした時のエラーを解決する

  • 更新日:
  • 公開日:

コアサーバー(CORESERVER.JP)でWordPressを操作したときの話です。

WordPressでメディアをアップロードした時に3つのエラーが出たのですが、そのエラーを解決したら2つ目のエラー、さらに3つ目のエラーとマトリョーシカ状態に。しかも3つ目のエラーは「session.save_path」の設定関係で、ネット上にも解決方法が見つからず対処まで時間がかかりました。

1つ目のエラーはパーミッションが原因

メディアに画像を追加しようとしたら、

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

というエラーメッセージが出てしまいました。これはパーミッションとPHPのセーフモードが有効になっていることが原因のようです。

このエラーに関しては沢山のブログで解決方法が書かれていますので、その中から参考になる記事を1つご紹介します。

2つ目のエラーは「BOMあり」が原因

2つ目のエラーはphpが吐き出しました。

Warning: Cannot modify header information - headers already sent by (output started at /virtual/[ユーザーID]/public_html/[ドメイン名]/wp-content/themes/[テーマフォルダ]/functions.php:1) in /virtual/[ユーザーID]/public_html/[ドメイン名]/wp-admin/async-upload.php on line 32

これはファイルにBOM(バイトオーダーマーク)が付いている時に出るエラーです。「headers already sent by()」の括弧内で指定されているファイルがBOMありだよ、と警告しています。(いつの間に付いたんだ…)

今回はテーマファイルのfunctions.phpが「BOMあり」になっていました。ファイルをBOMなしにするには、エディタで「BOMなし」にして保存する必要があります。

例えばDreamWeaverでBOMなしファイルにするならこの記事が参考になります。

WebStorm/PhpStormでBOMを削除する方法はこちらの記事を参考にして下さい。

3つ目のエラーはsession.save_pathがエライことになってるのが原因

正直詳しい原因が分からなかったので見出しを濁してしまいましたが、3つ目は以下のエラーをphpが吐き出しました。

Warning: Unknown: open(/tmp/[一時ファイル名], O_RDWR) failed: Permission denied (13) in Unknown on line 0

Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

推測ですが、「session.save_pathで設定されているディレクトリが見つからない」といった内容かと思います。

行った解決策は、php.iniにsession.save_pathの設定を書いてやり、次いでtmpフォルダも用意してあげる、という手順です。

ちなみにこちらは、メディアに画像をアップロードした時、2つ目のエラーとセットで出てきました。アップロード時にwp-admin/async-upload.phpのファイルが動いてエラーが起きています。

コアサーバーはphp.iniを管理画面から設定することは出来ません。設定を適用したいディレクトリ各々にphp.iniを置かなければいけない仕様になっています。

今回はwp-adminディレクトリにあるphpファイルが動く時にエラーが起きていたので、wp-adminディレクトリにphp.iniを置きました。

session.save_pathエラー解決の手順

まず、以下の記述をしたphp.iniを用意します。tmpの後ろにスラッシュは付け足さないで下さい。(テキストファイルやエディタで作成します)

session.save_path = /virtual/[ユーザーID]/tmp

このphp.iniをエラーが起きているphpが入ってるディレクトリに置きます。僕と同じエラーが出ている場合はwp-adminディレクトリに置いてください。

次に一時ファイルを保存するディレクトリを用意します。

FTPのルートアカウントでFTPサーバーにログインし、ルート直下に「tmp」という名前のフォルダを作成します。

こうすると、一時ファイルの保存フォルダにphpがアクセス出来るようになりエラーが解決されます。

.htaccessでも設定出来るかも

php.iniにsession.save_pathの設定を記述する方法を取りましたが、htaccessに記述することでも設定を適用出来るかもしれません。

試してないので確かではありませんが、こちらの記事を見る限り、設定出来そうな気がします。(出来なかったらやはりphp.iniでやりましょう)

今はコアサーバーを弄れる環境がないので試せません。

photo credit: splorp via photopin cc

書いた人

Symbol Mark

Ryoichi(しつ)

除菌ティッシュを買い込んで使いきれずによく乾かす人。

療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。

※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。

うぇぶ: @s_ryone