OpenPNE



2011年 3月 24

PHP5.3にしたらOpenPNEでエラーが発生。
このようなエラー。

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/html/OpenPNE/lib/include/PEAR.php on line 569

Deprecated: Assigning the return value of new by reference is deprecated in /var/www/html/OpenPNE/lib/include/PEAR.php on line 572

以下(ry

PEAR使ってる状態でPHPのバージョンを上げると、PEARから上記エラーが出てくる場合がありますが・・・
これは、PHP5では、newすると参照になるのに、それを =& でさらに参照で受け取ろうとしてエラーが出ている模様。
消す方法はいくつかあります。
1. error_reportingで表示しないようにする。
error_reporting(E_ALL & ~E_DEPRECATED);

2. エラーの出ている場所を修正する。
エラー箇所のソースを読むと、 =& になっているので = に変更。

参照:為せば成る・・・かもしれない

と言うことなので、OpenPNEのconfig.phpを修正する。
PHPの仕様が変更されたので出る警告らしい。
エラーは消えるけど、将来的にはソースを変更した方がいいのかも。

OpenPNE_DIR/config.php 236行目付近(バージョンによって違うかも)

///
// デバッグ、エラーハンドリング、ログ設定
///

//error_reporting(E_ALL ^ E_NOTICE); ←コメントアウト
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE); ←追記

OpenPNEの不具合

get@hoge.com (空メールで登録用URLを送信するアドレス)へ送ってもメールが帰ってこない。
オープン制の場合はスクリプトの修正が必要かも。
日記のメール投稿やコミュニティの投稿などは出来るようだ。


Filed under: OpenPNE

Trackback Uri






2009年 10月 16

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リスタート。

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


Filed under: OpenPNE

Trackback Uri






2007年 10月 23

OpenPNEのパッチファイルをあてる方法で分かりやすかった記事

文生のメモ帳EXTRA
http://memo.fumio.net/2007/04/openpne.html


Filed under: OpenPNE

Trackback Uri






2007年 10月 19

公開日記モジュール(OpenDiary)をOpenPNE2.8.x以降で使うと日記を「外部に公開」とすると「最新日記一覧」に反映されない。

手順通りの他に以下の箇所を修正すると「外部に公開」とした日記が最新日記一覧に表示された。

OPENPNE_DIR/webapp/lib/db/diary.php の736行目付近

修正前


//自分の日記だけを対象にする事も出来る
if ($c_member_id) {
$where = ' WHERE c_member_id = ?';
$params[] = intval($c_member_id);
} else {
$where = " WHERE public_flag = 'public'";
}

修正後


//自分の日記だけを対象にする事も出来る
if ($c_member_id) {
$where = ' WHERE c_member_id = ?';
$params[] = intval($c_member_id);
} else {
$where = " WHERE public_flag = 'public' or public_flag = 'open'";
}


or public_flag = ‘open’を追加する


さらに外部公開日記にコメントを残すと「日記コメント記入履歴」(?m=pc&a=page_h_diary_comment_list)に反映されない問題も

この問題の修正もOPENPNE_DIR/webapp/lib/db/diary.php の581行目付近と600行目付近の2箇所を修正する事で解決出来る。

修正前


' AND (d.public_flag = \'public\' OR (d.public_flag = \'friend\' AND d.c_member_id IN (' . $friend_ids . ')))' .

修正後


' AND (d.public_flag = \'public\' OR d.public_flag = \'open\' OR (d.public_flag = \'friend\' AND d.c_member_id IN (' . $friend_ids . ')))' .

OR d.public_flag = \’open\’を追加する


Filed under: OpenPNE

Trackback Uri