XAMPP for Windows + OpenPNEでメール送信エラー

XAMPP for WindowsOpenPNE の組み合わせで、メール送信処理の時にエラーが発生する。

Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in …

PHPの設定を変更することで、正常に動作するようになるようだ。

c:\xampp\apache\bin\php.ini の以下の箇所を修正する。

変更前

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
;sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

変更後
sendmail_pathの頭にある「;」を削除する。

; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = "C:\xampp\sendmail\sendmail.exe -t"

修正後、Apacheを再起動すると、変更が反映される。(再起動するまでは修正が反映されないので注意)

OpenPNEは安心して使えるのか

OpenPNE開発履歴から、最近一年間のバグ修正の数を数えてみたところ、413件のバグ修正が行われていました。

一言にバグといっても、特定のブラウザで画面が乱れてしまうような重要度の低いバグならそれほど問題はありません。

ですが、これだけバグの数が多いとなると、個人情報を扱うソフトだけに信頼性に疑問を持ってしまいます。

バージョンアップの頻度も多く、管理も大変そうです。

OpenPNEは安心して使えるソフトなのでしょうか。

  • 2007/6/26 Ver.2.8.2
    • バグ修正(5件)
  • 2007/6/20 Ver.2.8.1
    • バグ修正(8件)
  • 2007/5/30 Ver.2.8.0
    • 仕様変更(3件)
    • 仕様バグ修正(9件)
    • 改善(25件)
    • バグ修正(219件)
  • 2007/5/22 Ver.2.6.7
    • バグ修正(61件)
  • 2007/4/11 Ver.2.6.6.2
    • バグ修正(1件)
  • 2007/4/10 Ver.2.6.6.1
    • バグ修正(1件)
  • 2007/4/05 Ver.2.6.6
    • バグ修正(25件)
    • 改善(10件)
  • 2007/3/13 Ver.2.6.5
    • バグ修正(8件)
  • 2007/2/20 Ver.2.6.4
    • バグ修正(1件)
  • 2007/2/19 Ver.2.6.3
    • バグ修正(9件)
  • 2007/2/6 Ver.2.6.2
    • 改善(7件)
    • バグ修正(10件)
  • 2007/1/17 Ver.2.6.1
    • 改善(2件)
    • バグ修正(25件)
  • 2007/1/1 Ver.2.6.0
    • 仕様変更改善(19件)
  • 2007/1/11 Ver.2.4.8
    • 改善(2件)
    • バグ修正(3件)
  • 2006/12/12 Ver.2.4.7
    • 改善(2件)
    • バグ修正(2件)
  • 2006/11/28 Ver.2.4.6
    • 改善(1件)
    • バグ修正(4件)
  • 2006/11/22 Ver.2.4.5
    • 改善(2件)
    • バグ修正(1件)
  • 2006/11/14 Ver.2.4.4
    • 改善(1件)
    • バグ修正(10件)
  • 2006/11/1 Ver.2.4.3
    • 改善(2件)
    • バグ修正(9件)
  • 2006/10/19 Ver.2.4.2
    • バグ修正(1件)
  • 2006/10/17 Ver.2.4.1
    • 改善(1件)
    • バグ修正(7件)
  • 2006/10/06 Ver.2.4.0
    • 仕様変更改善(15件)
    • バグ修正(3件)

OpenPNE2.8でオープン制にしても新規登録ボタンが表示されない問題について(解決)

前回の続き

OpenPNE2.8の設定で、招待制からオープン制に変更した。
これで、参加者の招待なしでも登録できるようになるはずだが、どこから登録できるのかわからない。

調査結果。

管理画面の「SNS設定」→「スキン画像変更」で、ログイン画面の画像を「skin_login_open.jpg」に変更する。

これで、トップ画面に「新規登録」ボタンが表示されるようになる。

結局、管理画面の「SNS設定」→「SNS設定」で「招待制/オープン制」を変更するだけではダメだということ。

OpenPNE2.8でオープン制にしても新規登録ボタンが表示されない問題について

OpenPNE2.8の設定で、招待制からオープン制に変更した。
これで、参加者の招待なしでも登録できるようになるはずだが、どこから登録できるのかわからない。

調べてみると、「OpenPNE オープン制で新規登録ボタンが無い」のページを発見。
解決方法は、public_html/skin/ディレクトリにある「skin_login_open.jpg」を「skin_login.jpg」に変更すること。
確かに、これでログイン画面に「新規登録」ボタンが表示されるようになった。

しかし、この対応はあまりスマートではないように思う。これが正式な方法なのだろうか?

ソースコードを追いかけてみることにする。

おそらく、このログイン画面で「skin_login.jpg」をよんでいるのが、OPENPNE_DIR/webapp/modules/pc/templates/o_login.tplの次の個所。

<img src="({t_img_url_skin filename=skin_login})" class="bg">

ここの「t_img_url_skin」というのは、PHPのテンプレートエンジンである「Smarty」のプラグイン機能で、実体は OpenPNE_DIR/webadd/lib/smarty_plugins/function.t_img_url_skin.php かな?
(Smartyについては全然知らないので、あまり自信がない。)

function.t_img_url_skin.phpでは、引数filenameと「c_skin_filename」テーブルのskinnameフィールドが一致するレコードがないとき、引数filenameに適当な拡張子(filenameがskin_から始まれば「jpg」を、それ以外の場合は「gif」)をつけて返す。

一致するレコードがある場合は、OPENPNE_IMG_CACHE_PUBLICの設定で処理が別れる。
OPENPNE_IMG_CACHE_PUBLICは、OPNPNE_DIR/config.phpで設定している。
初期値はfalse。

OPENPNE_IMG_CACHE_PUBLICがfalseの場合は、「img_skin.php?filename=引数のfilename」になる。

以上から、「c_skin_filename」テーブルに該当するレコードがないために、SNS設定の招待制/オープン制にかかわらず、常に「skin_login.jpg」になってしまっている。

期待される正しい動作は、「c_skin_filename」テーブルに該当するレコードがあり、「<img src=”OpenPNEのURL/img_skin.php?filename=skin_login)” class=”bg”>」になることだろう。

きっと、SNS設定画面で「設定変更する」ボタンを押したとき、「c_skin_filename」テーブルを更新するようにすれば、正しい動作になると思われる。

この続きは「 OpenPNE2.8でオープン制にしても新規登録ボタンが表示されない問題について(解決)」です。

Vine Linux 4.1にOpenPNE2.8をインストールする手順

Vine Linux 4.1にOpenPNE2.8をインストール手順です。

このサンプルでは、Vine Linux4.1を使っています。
基本的に、他のLinuxでも手順は変わらないと思います。

OpenPNEのダウンロード

  1. OpenPNEのダウンロードページを開く
    http://sourceforge.net/projects/openpne
  2. Download OpenPNEのリンクをクリック
  3. OpenPNE(stable)のリンクをクリック
  4. OpenPNE-2.8.0.tar.bz2(Windowsの場合はOpenPNE-2.8.0.zip)のリンクをクリック

ファイルの設置

ダウンロードしたOpenPNE-2.8.0.tar.bz2(Windowsの場合はOpenPNE-2.8.0.zip)を展開する。

tar xzvf OpenPNE-2.8.0.tar.bz2

展開されたファイルのうち、public_htmlディレクトリ以外のファイルをブラウザからアクセスできない場所に設置しま。
この設置場所をOPENPNE_DIRとします。

- OPENPNE_DIR
  ├ bin
  ├ lib
  ├ webapp
  ├ webapp_biz
  └ webapp_ext

public_htmlディレクトリをブラウザから閲覧可能な場所に設置します。

- public_html
  ├ config.inc.php
  ├ index.php
     ...

public_htmlのディレクトリ名は変更可能です。
snsなど、ほかの名前に変更しても問題ありません。

OPENPNE_DIRは、/home/yamamoto/OpenPNE/としています。
Windowsの場合は、C:\OpenPNE\などに設置すればいいと思います。

- /home/yamamoto/OpenPNE/
  ├ bin
  ├ lib
  ├ webapp
  ├ webapp_biz
  └ webapp_ext

public_htmlディレクトリは、/home/yamamoto/public_html/の下に設置して、ディレクトリの名前をsnsに変更しています。(/home/yamamoto/public_html/sns/になります。)

- /home/yamamoto/public\_html/sns/
  ├ config.inc.php
  ├ index.php
     ...

URLは、http://localhost/~yamamoto/sns/でアクセスできるようにします。
環境に合わせて読み替えてください。

public_htmlディレクトリの中にあるconfig.inc.phpを編集します。

define('OPENPNE_DIR', realpath('../'));

この行をブラウザからアクセスできない場所に設置したOPENPNE_DIRのパスを指定します。
絶対パス、相対パスのどちらでも指定できます。

define('OPENPNE_DIR', realpath('/home/yamamoto/OpenPNE/'));

ディレクトリのアクセス権の設定

ディレクトリのアクセス権を次のように設定します。

- OPENPNE_DIR
  ├ var
  │ ├ img_cache
  │ │ ├ gif [777]
  │ │ │ ├ w_h [777]
  │ │ │    ... [777]
  │ │ ├ jpg [777]
  │ │ │ ├ w_h [777]  
  │ │ │    ... [777]
  │ │ └ png [777]
  │ │    ├ w_h [777]
  │ │       ... [777]
  │ ├ log [777]
  │ ├ rss_cache [777]
  │ ├ templates_c [777]
  │ └ tmp [777]

アクセス権を設定するには、次のコマンドを実行します。

chmod -R 0777 var/*

config.phpの設定

OPENPNE_DIRディレクトリにあるconfig.php.sampleをconfig.phpにコピーします。

- OPENPNE_DIR
  ├ config.php
  ├ config.php.sample

コピーしたconfig.phpを環境に合わせて編集します。

URLの設定

// Web上の絶対パス(URL)(最後にスラッシュを付けてください)
define('OPENPNE_URL', 'http://sns.example.com/');

この行では、public_htmlディレクトリのURLを設定します。絶対パスで指定し、最後に/をつけます。

// Web上の絶対パス(URL)(最後にスラッシュを付けてください)
define('OPENPNE_URL', 'http://localhost/~yamamoto/sns/');

DB暗号化キーの設定

// DB暗号化キー(56バイト以内のASCII文字列)
define('ENCRYPT_KEY', '');

この行では、メンバーのログイン情報を暗号化する際に使用するキーを設定します。
他人に推測されにくい文字列にします。

// DB暗号化キー(56バイト以内のASCII文字列)
define('ENCRYPT_KEY', 'abcdefg');

メールサーバードメインの設定

// メールサーバードメイン
// 携帯メール投稿の宛先などのドメイン名に使われる
define('MAIL_SERVER_DOMAIN', 'mail.example.com');

この行では、携帯版でメール投稿をする場合に使用するメールサーバのドメイン名を設定します。
今回は、携帯版は使用しないのでパス。

データベース関連の設定

// DBサーバ設定
$GLOBALS['_OPENPNE_DSN_LIST']['main'] = array(
'dsn'  => array(
    'phptype'  => 'mysql',
    'username' => '',
    'password' => '',
    'hostspec' => 'localhost',
    'database' => '',
    'new_link' => false,
    ),
);

この部分は、データベースの設定を行います。

MySQLの設定は、データベースを「openpne_db」、ユーザー名を「openpne_user」、ユーザーのパスワードを「openpne_pass」とします。

データベースのユーザー名を設定します。

    'username' => 'openpne_user',

データベースのユーザーのパスワードを設定します。

    'password' => 'openpne_pass',

使用するデータベースの名前を設定します。

    'database' => 'openpne_db',

データベースの設定

MySQLにデータベースを作成します。

mysqladmin -uroot -p create --default-character-set=utf8 openpne_db

MySQLのバージョンが4.0以下の時は、–default-character-set=utf8 は不要です。

mysqladmin -uroot -p create openpne_db

MySQLのユーザーを作成する。

mysql -uroot -p
GRANT ALL PRIVILEGES ON openpne_db.* TO openpne_user@localhost IDENTIFIED BY 'openpne_pass';

OpenPNEセットアップ用SQL実行

cd setup/sql/mysql41/install/ (MySQLのバージョンが4.1以上の時。4.0以下の時はcd setup/sql/mysql40/install/)
mysql -uopenpne_user -popenpne_pass --default-character-set=utf8 openpne_db < install-2.8-create_tables.sql
mysql -uopenpne_user -popenpne_pass --default-character-set=utf8 openpne_db < install-2.8-insert_data.sql
cd ../option/
mysql -uopenpne_user -popenpne_pass --default-character-set=utf8 openpne_db < pnebiz-header.sql

メールサーバーの設定

今回は携帯版を使用しないのでパス。

セットアップモジュールの実行

config.phpのOPENPNE_URLで設定したURLに「?m=setup」をつけてアクセスします。

(例)
http://localhost/~yamamoto/sns/?m=setup

OpenPNEセットアップ画面が表示されます。
各項目を入力します。

「セットアップが完了しました。」と表示されたら、インストールは完了です。