コアサーバー(CORESERVER.JP)でWordPressを操作したときの話です。
WordPressでメディアをアップロードした時に3つのエラーが出たのですが、そのエラーを解決したら2つ目のエラー、さらに3つ目のエラーとマトリョーシカ状態に。しかも3つ目のエラーは「session.save_path」の設定関係で、ネット上にも解決方法が見つからず対処まで時間がかかりました。
1つ目のエラーはパーミッションが原因
メディアに画像を追加しようとしたら、
「ディレクトリ wp-content/uploads/[西暦]/[月] を作成できませんでした。この親ディレクトリのアクセス権はサーバーによる書き込みを許可していますか ?」
というエラーメッセージが出てしまいました。これはパーミッションとPHPのセーフモードが有効になっていることが原因のようです。
このエラーに関しては沢山のブログで解決方法が書かれていますので、その中から参考になる記事を1つご紹介します。
コアサーバーで画像がアップロード出来ない時やパーマリンク設定でエラー時の対処 – ホームページ制作やリニューアル印刷物デザインなら大阪のWPC
XREAやコアサーバーは、PHPはモジュール版でセーフモードが有効という仕様で、WordPressの一部の機能に制限がかかるようです。ですので、ディレク...
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なしファイルにするならこの記事が参考になります。
Dreamweaverを使ったBOMの削除方法 | ジユウメモメモ
文字コードがUTF-8のHTMLやPHPファイルを作るときに、エディタや設定によっては「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でやりましょう)
[サーバ]XREAで、phpの設定をするにはどうする? | while(life)tech_onoue++;
XREAで、XOOPSとかJoomlaとかインストールするときに、php.iniの設定をいじくらないといけないんだけど、XREAってphp.iniをいじれない設定になって...
今はコアサーバーを弄れる環境がないので試せません。