OpenPNE

OpenPne2で発生するDeprecatedエラー対応

OpenPneを最近のPHP5.3以降のサーバーに設置した場合、PHP5.3で非推奨になっている参照渡しが使われているため大量のエラーログがerror_logに記録される。
error_logを開くと

PHP Deprecated: Assigning the return value of new by reference is deprecated in 〜

が大量に見つかる。

このエラーは以下のファイルを修正することで解消する。

img_skin.php

$img =@ new OpenPNE_Img_ImageMagick($options);
} else {
$img =@ new OpenPNE_Img($options);

$img = new OpenPNE_Img_ImageMagick($options);
} else {
$img = new OpenPNE_Img($options);

img.php

$img =@ new OpenPNE_Img_ImageMagick($options);
} else {
$img =@ new OpenPNE_Img($options);

OpenPNEで日記コメントにメンバーのプロフィール画像を表示したい時

日記のコメントリストを取得するクラス・ライブラリを修正してメンバーのプロフィール画像も一緒に取得するようにする。

修正するのは以下のファイル
/OpenPNE/webapp/lib/db/diary.php

【修正前】
/**
 * 日記へのコメントリストを取得
 */
function k_p_fh_diary_c_diary_comment_list4c_diary_id($c_diary_id, $page_size, $page, $desc = true)
{
    $sql = ‘SELECT * FROM c_diary_comment WHERE c_diary_id = ? ORDER BY r_datetime’;
    if ($desc) {
        $sql .= ‘ DESC’;
    }
    $params = array(intval($c_diary_id));
    $c_diary_comment_list = db_get_all_page($sql, $page, $page_size, $params);

    foreach ($c_diary_comment_list as $key => $value) {
        $c_member = db_member_c_member4c_member_id_LIGHT($value[‘c_member_id’]);
        $c_diary_comment_list[$key][‘nickname’] = $c_member[‘nickname’];
    }

    $sql = ‘SELECT COUNT(c_diary_comment_id) FROM c_diary_comment WHERE c_diary_id = ?’;
    $params = array(intval($c_diary_id));
    $total_num = db_get_one($sql, $params);

    if ($total_num > 0) {
        $total_page_num =  ceil($total_num / $page_size);
        if ($page >= $total_page_num) {
            $next = false;
        } else {
            $next = true;
        }
        if ($page <= 1) {
            $prev = false;
        } else {
            $prev = true;
        }
    }
    return array($c_diary_comment_list, $prev, $next, $total_num, $total_page_num);
}

【修正後】
/**
 * 日記へのコメントリストを取得
 */
function k_p_fh_diary_c_diary_comment_list4c_diary_id($c_diary_id, $page_size, $page, $desc = true)
{
    $sql = ‘SELECT * FROM c_diary_comment WHERE c_diary_id = ? ORDER BY r_datetime’;
    if ($desc) {
        $sql .= ‘ DESC’;
    }
    $params = array(intval($c_diary_id));
    $c_diary_comment_list = db_get_all_page($sql, $page, $page_size, $params);

    foreach ($c_diary_comment_list as $key => $value) {
        $c_member = db_member_c_member4c_member_id_LIGHT($value[‘c_member_id’]);
        $c_diary_comment_list[$key][‘nickname’] = $c_member[‘nickname’];
        $c_diary_comment_list[$key][‘image_filename’] = $c_member[‘image_filename’];
    }

    $sql = ‘SELECT COUNT(c_diary_comment_id) FROM c_diary_comment WHERE c_diary_id = ?’;
    $params = array(intval($c_diary_id));
    $total_num = db_get_one($sql, $params);

    if ($total_num > 0) {
        $total_page_num =  ceil($total_num / $page_size);
        if ($page >= $total_page_num) {
            $next = false;
        } else {
            $next = true;
        }
        if ($page <= 1) {
            $prev = false;
        } else {
            $prev = true;
        }
    }
    return array($c_diary_comment_list, $prev, $next, $total_num, $total_page_num);
}

これで$item.image_filenameのような形でメイン画像のファイル名が取得出来るようになる。

なお、変更・修正する場合は自己責任で。

OpenPNEでのログインセッション管理の改善方法(さくらインターネット)

オープンソースのOpenPNEを使って運営しているSNSにおいて

・ログインが途切れてしまう
・自動ログイン設定が反映されない

といったトラブル(問題)が発生した場合の対策・対処方法は、以下。

記載例は、OpenPNE運営の定番サーバーとも言えるさくらインターネットの場合。

ちなみに、会員数1000人程度までであれば、ハッスルサーバーでも運営は可能(体験済)

変更するのは「config.php」ファイル

■その1

// セッション情報を保存するストレージ
// 0:ファイル
// 1:データベース
// 2:memcache(要PECL::memcache)
define(‘SESSION_STORAGE’, 0);

これを

define(‘SESSION_STORAGE’, 1);

とする。

■その2

// セッションデータ保存用DB(オプション)
//$GLOBALS[‘_OPENPNE_DSN_LIST’][‘session’] = array(
// ‘dsn’ => array(
// ‘phptype’ => ‘mysql’,
// ‘username’ => ”,
// ‘password’ => ”,
// ‘hostspec’ => ‘localhost’,
// ‘database’ => ”,
// ‘new_link’ => false,
// ),
//);

これを

// セッションデータ保存用DB(オプション)
$GLOBALS[‘_OPENPNE_DSN_LIST’][‘session’] = array(
‘dsn’ => array(
    ‘phptype’  => ‘mysql’,
    ‘username’ => ‘アカウント名’,
    ‘password’ => ‘パスワード’,
    ‘hostspec’ => ‘mysqlXX.db.sakura.ne.jp’,
    ‘database’ => ‘アカウント名’,
    ‘new_link’ => false,
    ),
);

※行頭にある//をすべて取る(消す)

とする。

以上2点を変更すうことにより、セッション情報はDB(MySQL)内に保存されるようになる。

デジタルゲートが使って選んだ、OpenPNEにオススメのレンタルサーバー




 

OpnePNEでflickr用に小窓(cmd)を使いたいとき(そのまま使えるサンプル掲載)

OpnePNEにはCMD(小窓)という便利な機能があり、小窓が用意されているサイトであれば、そのURLを日記等に記載するだけで、自動的に画像やサービス、動画が埋め込まれたりする。(Google Map、YouTube、Amazon、kakaku.com、等々)

最近ではオンラインサービスであるflickrを利用している人も増えているので、flickr用に小窓(cmd)を使いたいという案件や、作りたい場面があるはず。
小窓の作成は一定のルールさえ分かっていれば、簡単に小窓を作ることが出来る。

flickrの画像URLには、登録者や状況により
http://farm1.static.flickr.com
http://farm2.static.flickr.com
http://farm3.static.flickr.com
http://farm4.static.flickr.com
と4種類で始まっている

flickr用の小窓を作る場合の問題点は、OpnePNEのCMD(小窓)がサブドメインのワイルドカードに対応していないこと。
つまり作成するJavascriptは、それぞれ決め打ちのファイル名であることが必要条件となる。

つまり、上記4つのサブドメインに対応するCMD(小窓)を用意したければ、4つのJavascriptをcmdフォルダに入れておく必要がある。

farm1.static.flickr.com.js
farm2.static.flickr.com.js
farm3.static.flickr.com.js
farm4.static.flickr.com.js

一見無駄なようだが、ワイドルカードで探させるよりサーバー負荷を考えると効率的でもある。

それぞれのサーバー(farm1、farm2、farm3、farm4)用にスクリプトを書いてもいいが、
今後サブドメインが追加された際に、ファイル名だけ変えてコピーできるようにスクリプトを作っておくと便利。

そのまま使えるサンプルスクリプトはこれ

———————————————————————

function url2cmd(url){
   var static_flickr_com = url.match(/^http:€/€/farm([0-9]+)€.static€.flickr€.com€/([0-9]+)€/([a-z0-9_]+)€.(jpg|jpeg|png|gif)/);
   if(static_flickr_com){
      var pid1 = RegExp.$1;
      var pid2 = RegExp.$2;
      var pid3 = RegExp.$3;
      var pid4 = RegExp.$4;
      main(pid1,pid2,pid3,pid4);
   }else{
      pne_url2a(url);
   }
}
function main(pid1,pid2,pid3,pid4){
   var html = ‘<img src=”http://farm’ + pid1 + ‘.static.flickr.com/’ + pid2 + ‘/’ + pid3 + ‘.’ + pid4 + ‘”>’;
   document.write(html);
}

———————————————————————

念のため、画像ファイル名をjpg、jpeg、png、gifの4種類に限定しているが、flickr.comを信頼して簡略化しても構わない。

上記スクリプトを
farm1.static.flickr.com.js
farm2.static.flickr.com.js
farm3.static.flickr.com.js
farm4.static.flickr.com.js
の名前でそれぞれ作成し、cmdフォルダにアップする。

これでflickr.comに対応したCMD(小窓)となる。

iPhoneStyleで1000人へのカウントダウン開始。

iPhone対応SNS『iPhoneStyle』の登録者数がまもなく1000人を迎えることもあり、SNS内で1000人までのカウントダウンの表示をスタート。

今回は、事前に1000人達成日の予測を呼びかけたことから、数字の見えない総数ではなく、誰でも確認することのできる初期登録コミュ『iStyle』の登録者数をカウント数値として採用している。

こういった場合、特定のコミュの登録者数を得るには、OpenPNEで用意している、db_commu_count_c_commu_member_list4c_commu_idという関数を利用するのが簡単でいい。
引数にコミュのID番号を渡してやると、登録者数が返ってくる。
実際にはその値をテンプレートに使うので、以下のようにしている。

$this->set(‘target_commu_member_num’, db_commu_count_c_commu_member_list4c_commu_id($target_commu_id));

あとはsmartyの書式に従いテンプレートファイルで利用すればいい。

OpenPNEで日記新しい項目を追加したい時

OpenPNEでのSNS運用していて、日記等のフォームに新しい項目を追加したいこともあるだろう。
しかし、OpenPNEの場合、単純にテンプレートに追加するだけでは処理されない。
その場合は、以下のファイルを修正していくことで変更することが可能となる。

———————————————————————-

まずは、表示のためのテンプレートファイル
フォームの希望する場所(テーブル処理されている部分)に

<tr>
<th>項目</th>
<td>内容</td>
</tr>

と追加する。

■変更ファイル
templates/
h_diary_add.tpl
h_diary_add_confirm.tpl

※項目内容をデータベースから取得する場合や、フォーム内に登録者毎のデータが必要な場合は、以下のPHPファイル内で取得する

———————————————————————-

テンプレート用にデータ取得等の処理が必要であれば、以下のPHPファイル内で処理し
$this->set(‘hoge’, $hoge);
といった形でtplに渡せばいい

■変更ファイル
page/
h_diary_add.php
h_diary_add_confirm.php

———————————————————————-

項目内での変更や選択肢の追加等の場合は上記page内とtemplates内のファイルのみで良いが、新たに項目を追加しリクエスト変数が増えた場合は、validate内で定義してやる必要がある

■変更ファイル
validate/do
h_diary_add_insert_c_diary.ini

validate/page
h_diary_add.ini
h_diary_add_confirm.ini

上記ファイル内で、欲しいデータ形式に合わせ、新たなリクエスト変数を定義する

type
int→整数
string→文字列

———————————————————————-

これでデータの項目表示、フォームデータの受け渡しが可能となる。
あとは、渡されたデータをデータベースに登録するロジックを追加すればいい。

OpenPNEのカスタマイズでメンバーのプロフィールを取得したい時

OpenPNEをカスタマイズしている時、独自コンテンツの追加等で、参加しているユーザーの情報を取得したい場合がある。
そんな時、オリジナルの関数を作ってもいいが、

OpenPNE/webapp/lib/db/member.php

内にいろいろな関数が用意されているので、それを上手に使うといい。

足あとツールからSNS(OpenPNE)を守る方法(その2)

前回、足あとツールからSNS(OpenPNE)を守る方法(その1)で足あとツールの目的を紹介したが、そういった無駄なアクセスを排除するためには、不自然アクセスを検出することが大切。

mixi等の大手SNSではログ解析の専用ツールを用意しているが、無料レンタルのSNSや、中小規模のSNSや個人で運営しているSNSでは、わざわざ解析ツールを用意するのは難しいだろう。

そこでOpenPNEの管理画面であらかじめ用意されている統計情報を取得するためのプログラムを利用する。

方法は簡単。個人で導入しているOpenPNEはもちろん、無料レンタルSNSの場合でも、現行バージョンに近ければ、同じ方法が使える可能性があるから試してもらいたい。

まずは、管理画面から「統計情報」を選択
「PC版ページ月次集計」を選択
『アクセスメンバー数』にある「今月最もアクセスをしたメンバーを表示する」を選択
これで
「PC版 2009年07月にアクセスしたメンバー」の情報が得られる

この段階で明らかに不自然なアクセス数があれば、そのユーザーをチェックすればいい。

なお、登録してすぐのユーザーはあちこち見てまわってアクセスしていることも多いから、日ごとのログを調べるのが確実。
上記の例「PC版 2009年07月にアクセスしたメンバー」を表示した時のURLを見ると、以下のようになっているはず。

http://xxxxxxxxxx.com/?m=admin&a=xxxxxxxxxx&ktai_flag=0&ymd=2009-07-01&month_flag=1&page_name=all&orderby2=-2

このURLに含まれる引数の中で「&month_flag=1」に注目して欲しい。
これは7月にアクセスしたメンバーであるが、「&month_flag=1」を「&month_flag=0」にすることで、「&ymd=」の日付のみのログデータを取得できる。

例:2009年7月17日

アクセス数多い順に並べる
〜&ktai_flag=0&ymd=2009-07-17&month_flag=0&page_name=all&orderby2=-2

アクセス数少ない順に並べる
〜&ktai_flag=0&ymd=2009-07-17&month_flag=0&page_name=all&orderby2=2

ID番号の大きい順に並べる
〜&ktai_flag=0&ymd=2009-07-17&month_flag=0&page_name=all&orderby1=-1

ID番号の小さい順に並べる
〜&ktai_flag=0&ymd=2009-07-17&month_flag=0&page_name=all&orderby1=1

上記のような引数に変えることで、希望日のユーザーアクセス数が取得できる。
この結果を参考にし、アクセス数が異常に多いユーザーについて調べるといい。

上記の表示が可能なように管理者ページのカスタマイズも有償で承ります。
お気軽に、デジタルゲートまでお問い合わせを。

足あとツールからSNS(OpenPNE)を守る方法(その1)

アフィリエイト、MLM、アダルトサイト、アダルトSNS、出会い系サイト、動画サイト、販売サイトといった商業目的から、個人サイトや個人ブログの宣伝目的といった理由でSNSに参加する登録者は大量に存在する。

それらのユーザーは目的の告知やURL、キャッチコピー、セールストークを読ませる為に各SNSのマイページにアクセスさせることが必要であるため、様々な手段を用いてアクセスさせる。
例えば女性名で登録し、可愛いプロフィール写真やセクシーなプロフ画像と刺激的な日記を掲載し、最新日記や日記検索から誘導するといった方法。
この手法は男性を相手とする場合(ホストや男性のアダルト画像・動画のように女性向けもあるが)には有効だが、アフィリエイト、MLM、情報商材の販売には向かない。
そこで、mixiを始め、多くのSNSに機能として存在する足あと機能(足跡・あしあと)を利用する。

方法は簡単で、目的のユーザー(無差別であったり、特定の検索キーワードで絞ったユーザーであることもある)のページにアクセスして「あしあと」を残す。SNSユーザーの多くは、SNSにログインすると最新日記とあしあとリストをチェックする場合が多いので、自分に残された「あしあと」の名前をクリックして向こうから訪問してくれる。あとは、自己紹介やプロフィールに美味しい言葉を並べておくだけでいい。

この方法はお金もかからず相手も簡単に探せるが、唯一の問題は手間がかかること。
そこで巷には、「足あとツール」「足跡ツール」といったものが存在する。
販売サイト「寝ている間にどんどん稼げる」「mixiで毎月何百万儲ける」といった、まさに美味しい言葉が書いて、それ自体が商材でもある。
ご丁寧にアクセスして、メッセージを送ってくれるものも存在する。

次に、そういったツールを使った無駄なアクセスを排除するための方法を説明する。

iPhone SNS『iPhoneStyle』でPC用レイアウトの公開開始

デジタルゲートが運営するiPhoneオーナーのためのSNS『iPhoneStyle』では、5月25日よりパソコンからSNSへのアクセスに向けたPC用レイアウトでの公開を開始しました。
(iPhoneからのアクセス用のiPhone専用レイアウトも今まで通り継続)

iPhoneオーナー専用のSNSでありながらPC向けレイアウトページを公開する理由として、SNS利用データの解析結果においてMacintosh、Windowsのいずれからもパソコンを利用したアクセスがそれぞれ20%前後あることから、パソコンからのアクセス時により使い易くすることを目的としています。

iPhone用に特別にカスタマイズされたレイアウトと、使い慣れたPC向けのレイアウト。
これからはそれぞれのアクセス方法に合わせたレイアウトでお楽しみください。

iPhoneStyleは@i.softbank.jpのアドレスがあれば、招待無しで登録・利用が可能です。※すべて無料。

まだ未登録の方はこちらから。
『iPhoneStyle』
http://iphone-sns.com/
※登録もiPhone、パソコンどちらからでも可能です。