OpenPNEで全然ログイン出来ない

OpenPNEで全然ログイン出来ない

RDBMS(MySQL)ベースでログイン出来たのにファイルベースだとログイン出来なかった。
ログインボタンを押した後ブラウザに表示されるエラー内容はこんな感じ。

Warning: session_destroy(): Session object destruction failed in /var/www/html/xxxxx.com/OpenPNE/webapp/lib/OpenPNE/Auth.php on line 204

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/xxxxx.com/OpenPNE/webapp/lib/OpenPNE/Auth.php:204) in /var/www/html/xxxxx.com/OpenPNE/webapp/lib/util/util.php on line 34

借りている専用サーバではなにもしないで使えたOpenPNEだったけど、自分のサーバ環境では足りないものがあったのでメモ。

OpenPNEを使うには以下のものが必要のようだ。

参考:http://wiki.ryusendo.net/index.cgi?page=OpenPNE

  • httpd
  • php
  • php-mbstring
  • php-mysql
  • php-mcrypt
  • libmcrypt
  • mysql
  • mysql-server
  • postfix(sendmailや他のMTAでも可だと思う)

特に忘れがちなのが php-mcrypt らしく、自分の環境でも入っていなかった。

ファイルベースでセッション管理するには必須のようだ。

php-mcrypt のインストール

CentOS5ならyumでOKらしい。

yum install php-mcrypt

CentOS4 の場合はRPMからインストールが必要。

手順はコピペ。

参考:http://centossrv.com/bbshtml/webpatio/364.shtml

1.mcryptを組み込むのに必要なlibmcryptをrpmforgeからインストールします。
# yum -y --enablerepo=rpmforge install libmcrypt-devel

2.php用のmcrypt拡張モジュールをPHPRPMsよりダウンロードします。
# cd /usr/src/redhat/RPMS/i386/
# wget http://jaist.dl.sourceforge.net/sourceforge/phprpms/php-mcrypt-4.3.9-3.2.1.i386.rpm
最新版はhttp://phprpms.sourceforge.net/mcryptで確認して下さい。
CentOSはRHEL互換なのでRHEL4の物を落としました。
X86_64で無いならばi386で問題ありません。

3.ダウンロードしたrpmをインストールします。
# rpm -Uvh php-mcrypt-4.3.9-3.2.1.i386.rpm

ただし、

手順は以下のページhttp://phprpms.sourceforge.net/mcrypt は現在更新されていない(?)

以下のページでも出来ると思う。

CentOS4.8へphpmyadminをインストール

(2)「mcrypt 拡張をロードできません。PHP の設定を確認してください」というエラーへの対処。

を参考に。

これでヨシ、と思ったら。。。

いざログインしてみるとエラー。

あれ?ダメだ。

Auth.phpでググってみると、PEAR::Auth なるものハケーン。

perlでいうモジュールのようなものか?

インストールしてあるものを確認。

# pear list
Installed packages, channel pear.php.net:
=========================================
Package        Version State
Archive_Tar    1.3.1   stable
Console_Getopt 1.2     stable
DB             1.6.2   stable
HTTP           1.2.2   stable
Mail           1.1.3   stable
Net_SMTP       1.2.3   stable
Net_Socket     1.0.1   stable
PEAR           1.4.9   stable
XML_Parser     1.0.1   stable
XML_RPC        1.5.0   stable

とりあえずインストールしてみる。

# pear install Auth

確認してみる

# pear list
Installed packages, channel pear.php.net:
=========================================
Package        Version State
Archive_Tar    1.3.1   stable
Auth           1.6.2   stable
Console_Getopt 1.2     stable
DB             1.6.2   stable
HTTP           1.2.2   stable
Mail           1.1.3   stable
Net_SMTP       1.2.3   stable
Net_Socket     1.0.1   stable
PEAR           1.4.9   stable
XML_Parser     1.0.1   stable
XML_RPC        1.5.0   stable

これでどうだ?
だめらしい。。。

結局の所

config.phpの設定を

// デバッグモード
// 0: off ... エラー非表示、エラーログを記録する
// 1: on  ... エラー表示、エラーログを記録しない
// 2: on  ... 1 + Smartyデバッグコンソール
define('OPENPNE_DEBUGGING', 0);

にして、ログを記録させると
/var/www/html/sns.kaneyosi.com/OpenPNE/var/log/php_errors.log
というログが出来ていた。
内容はこんな感じ。

[16-Oct-2009 13:06:20] PHP Warning: Unknown(): open(/var/lib/php/session/sess_be885c6f8a428b01a1bf8466fc878cf7, O_RDWR) failed: Permission denied (13) in Unknown on line 0
[16-Oct-2009 13:06:20] PHP Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0
[16-Oct-2009 13:06:20] PHP Warning: session_destroy(): Session object destruction failed in /var/www/html/xxxx.com/OpenPNE/webapp/lib/OpenPNE/Auth.php on line 204

結局原因は /var/lib/php/session にアクセス権が無いという事だったというオチ。
httpd.confの実行ユーザーを変えていたからか。

対処方法は/var/lib/php/session のパーミッションを770から777にするか、apacheの実行グループをapacheにすれば良かっただけの話。

早速httpd.conf を修正。

# User/Group: The name (or #number) of the user/group to run httpd as.
#  . On SCO (ODT 3) use "User nouser" and "Group nogroup".
#  . On HPUX you may not be able to use shared memory as nobody, and the
#    suggested workaround is to create a user www and use that user.
#  NOTE that some kernels refuse to setgid(Group) or semctl(IPC_SET)
#  when the value of (unsigned)Group is above 60000;
#  don't use Group #-1 on these systems!
#
User myname
Group apache ←修正

で、apacheリスタート。

ようやくうまくいきました。