adminerで思わぬエラーがでる
パーミッションエラー
adminerはデータベース管理ツールで、phpMyAdminとは違い、1ファイルで設置できることから手軽に扱えるとして人気があります。@MINOもたいていはadminerを使うようにしています。
さてそんなadminerで以下のようなPHPエラーが表示されることがあります。
Warning: session_start(): open(/var/lib/php/session/sess_dm531g7qh2rhbfp5phctj1p9g7, O_RDWR) failed: Permission denied (13) in /var/www/html/test/am422.php on line 68 Warning: session_write_close(): open(/var/lib/php/session/sess_dm531g7qh2rhbfp5phctj1p9g7, O_RDWR) failed: Permission denied (13) in /var/www/html/test/am422.php on line 69 Warning: session_write_close(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in /var/www/html/test/am422.php on line 69
このエラーが大量に出る場合はPHPセッションパスに対して書き込み権限がないユーザがhttpdを動かしている可能性が高いと思われます。
一応このエラーがでてもadminer自体は使えないことはないです。
しかしadminerではセッションを使うことで正しく動くので、このままでは気持ちが悪いです。
adminerでのパーミッションエラー対処法
対処法を確認しておきましょう。
PHPセッションパスはphp.iniの以下の行で指定されている(以下はCentOSの場合)。
/etc/php.ini
1268 session.save_path = "/var/lib/php/session"
デフォルトではこのディレクトリは所有者root:グループapacheになっているはずです。またパーミッションは770になっているはずです。
ここのパスに対してhttpdの実行ユーザの書き込み権限がないと、セッションを扱うことができないです。
通常httpdがデフォルトで設定しているユーザ(apache)から、何らかの理由でユーザやグループを変更した場合、各ディレクトリに対しての権限に不都合が起こる場合があります。
今回の例の原因はまさにそれです。
httpdの実行ユーザを修正するには、httpd.confの244行目と245行目にユーザとグループの設定を確認しましょう。
/etc/httpd/conf/httpd.conf
244 User apache
245 Group apache
この設定を確認して、ユーザやグループを変更してしまっていないかを確認しましょう。
もし何らかの作業で変更して元に戻していない場合は、デフォルトのユーザ、グループにすることで、adminerのセッションディレクトリパーミッションエラーは消えるはずです。
まとめ
できるかぎりはデフォルト設定のユーザで動かした方が、トラブルは少ないと思います。
またセッション用のディレクトリを変えてしまっていた場合も、同様に権限エラーが出る場合が多いです。
もし、大して理由もないなら、ユーザ、グループの変更やディレクトリ指定の変更はよしておいたほうがよさそうです。
思わぬ不具合に直面してしまうかもしれないです。