Jul 05, 2009, 01:35 PM *
Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length
Search via SMF or Google: modx forums all of modxcms.com web
  MODxCMS.com   Forums   Help Login Register  
News:Donate to MODx: Donations
Pages: [1] 2 3   Go Down
  Print  
Author Topic: bbclone でページリンクにフレンドリーURLを記録したい  (Read 2464 times)
0 Members and 1 Guest are viewing this topic.
dainiti
Sr. Member
****
Posts: 416



« on: Jan 10, 2009, 08:18 AM »

約2ヶ月ほど悩んでいますが自分の力だけではどうしようもないようです。

現在 index.php の先頭と最後に以下のようなコードを書いて訪問済みページ名などは正常に記録できているのですがエイリアス名フレンドリーURLまで記録できずに http://www.example.com/ のようにドメイン名までしか記録できません。WordPress などでも同じような方法で挑戦しているのですが結果は同じです。CMS では難しいのでしょうか。

bbclone 側を改造するしかないのか、方法をご存知の方おいでましたらよろしくお願いいたします。

先頭
Code:
$HTTP_USER_AGENT = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
$HTTP_REFERER = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
$PATH_INFO = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';
          ・
          ・
          ・
最後
Code:
$_SERVER['HTTP_USER_AGENT'] = $HTTP_USER_AGENT;
$_SERVER['HTTP_REFERER'] = $HTTP_REFERER;
$_SERVER['PATH_INFO'] = $PATH_INFO;
$page_title=$modx->documentObject['pagetitle'];
$bbclone_path=$modx->config['$base_path']."bbclone/";
define("_BBC_PAGE_NAME", "$page_title");
define("_BBCLONE_DIR", $bbclone_path);
define("COUNTER", _BBCLONE_DIR."mark_page.php");
if (is_readable(COUNTER)) include_once(COUNTER);
Logged
yama
Moderator
*
Posts: 767

MODx研究中


WWW
« Reply #1 on: Jan 10, 2009, 08:50 AM »

$_SERVER['PATH_INFO']が取得できてないみたいですね。何らかの方法があると思うので、あとで調べてみます。
Logged
ZeRo
Sr. Member
****
Posts: 426



WWW
« Reply #2 on: Jan 10, 2009, 08:55 PM »

最初にBBCLONEをインクルードして実行させてからMODxのコアを動かせばよいんじゃないっすかね?
昔、アクセス解析を埋め込んでたときはMODx動かす前にINCLUDEで処理させてたりしていました。
Logged

sama55
Sr. Member
****
Posts: 251


WWW
« Reply #3 on: Jan 10, 2009, 09:46 PM »

こんにちは

dainitiさん楽しそうなことやってますね。

私のサイトはSAKURAのプレミアムですが、yamaさんが仰るようにPATH_INFOが取れませんでした。
PATH_INFOはApacheのmod_rewriteの影響を受けるんですね。

各イベントでの変数をダンプしてみたところ、REQUEST_URIにはサーバールートからの相対パスが常にセットされているようなので、プラグインでカウント処理を作り、$modx->config['site_url']と連結するって手はどうでしょう(MODxをサブフォルダにインストールしてると単純に連結するとサブフォルダがダブるので注意)。

参考 : ダンププラグイン

 ログインしている場合のみassets/cache/******にログを書き込みます。
 注意) このプラグインはセキュリティ上好ましくありませんので、試された後はログファイルとプラグインを必ず消してください。
 (類似アドオンをうまく探せなかったので自作しました)

 プラグイン名 : 任意
 設定 : 特になし
 システムイベント : コード内のcase文と同じイベントをチェック
 注意 : $logFilePath を設定する行を書き換えてください。 #重要#
 コード: 
Code:
// ログインしている時だけ動作
if(isset($_SESSION['mgrValidated']) && $_SESSION['mgrValidated']) {

$e = &$modx->event;
switch ($e->name) {

  // プラグインの「システムイベント」でチェックしたイベントを記述
  case "OnWebPagePrerender":
  case "OnWebPageComplete":
  case "OnWebPageInit":
  case "OnLoadWebPageCache":

    // ログファイルのサーバ上の物理パス(書き込みが成功する確率が高いキャッシュフォルダを使います)
    // #### hogehogeを変えて!!!ERROR LINE!!!を消すまでエラーで実行できません。####
    $logFilePath = $modx->config['base_path'] . 'assets/cache/hogehoge.txt';  !!!ERROR LINE!!!

    // ログの編集

    // ブロックヘッダ
    $out = '' ;
    $out .= '-------------------------------------------------------------------------' . "\n" ;
    $out .= '-' . "\n" ;
    $out .= '- Event : ' . $e->name . ' [' . date("Y/m/d H:i:s") . ']' . "\n" ;
    $out .= '-' . "\n" ;
    $out .= '-------------------------------------------------------------------------' . "\n" ;

    // ログ内容
    $out .= '********** $_SERVER **********' . "\n" ;
    $out .= print_r($_SERVER, TRUE) . "\n" ;
    $out .= '********** $_COOKIE **********' . "\n" ;
    $out .= print_r($_COOKIE, TRUE) . "\n" ;
    $out .= '********** $modx->config **********' . "\n" ;
    $out .= print_r($modx->config, TRUE) . "\n" ;

    // ブロックフッタ
    $out .= "\n\n" ;

    // 書き出し(追加)
    if ($handle = fopen($logFilePath, 'a')) {
      fwrite($handle, $out) ;
      fclose($handle) ;
    }
    unset($logFilePath, $out, $handle);
    break;
}

}

余談)
bbcloneの実装は、カウント処理はプラグイン、集計結果はモジュールでできたら皆喜ぶかもしれませんね。
 参考 : http://www.modxcms.com/Page-Hit-Counter-878.html

Logged
dainiti
Sr. Member
****
Posts: 416



« Reply #4 on: Jan 10, 2009, 11:45 PM »

最初にBBCLONEをインクルードして実行させてからMODxのコアを動かせばよいんじゃないっすかね?
昔、アクセス解析を埋め込んでたときはMODx動かす前にINCLUDEで処理させてたりしていました。
ZeRo さんはじめまして、コメントありがとうございます。「modx include」をキーワードに過去ログを検索してみたところ2年以上前の「アクセス解析プログラムのトリガー文(PHP文)を埋め込みたい」http://modxcms.com/forums/index.php/topic,2844.msg20022.html#msg20022にたどり着きました。

yama さんもこの頃は聞く側だったんですね。ここのフォーラムの欠点は結論がどうなったのかわからないまま話が途中で立ち消えになっている事が多いのではないかと思っております。その分、thr さんの日本公式サイトでの FAQ の充実を願っているところです。

sama55 さんどうもです。一度ご教授いただいたコードで試してみたいと思いますがプラグイン、モジュールを使わずに bbclone の解析結果の画面をそのまま使いたいと思っております。具体的には $modx->config['site_url']+パス.html を bbclone に渡す方法がないのかと思っております。もう少し模索してみたいと思いますので来年まで (・・? 結果報告はお待ちください。

まだまだ、ここのフォーラムはある程度以上の知識を前提に話が進んでいくところが欠点ではないかと思っているしだいです。sama55 さんのように具体的にコードを提示してもらえると理解しやすいのですが・・・もちろん自分の勉強不足を棚に上げての話なので気を悪くしないでください。
Logged
yama
Moderator
*
Posts: 767

MODx研究中


WWW
« Reply #5 on: Jan 11, 2009, 12:03 AM »

そのへんのやりとりはphpを全然理解してなかった頃の書き込みですね。今試したらあっさりうまくいくかも。

たとえば$_SERVER['PATH_INFO']="test" なんてふうにするとどうなりますか?
それで実際にwww.example.com/testという文字列が表示されるようになったら、解決の道筋がついたようなものだと思います。
でも$_SERVER変数をこんなふうに書き換えちゃうのって、作法的にどうなのかという気がしないでもないですが。他がおかしくなりそうです。
Logged
ZeRo
Sr. Member
****
Posts: 426



WWW
« Reply #6 on: Jan 11, 2009, 12:25 AM »

なんか、かなり懐かしい書き込みですね。
そういえば、その頃はBBCLONEを使ってたような・・・。
PATH_INFOが問題であるならば、REQUEST_URIで代替がよいかもですね。
最近、BBCLONEも上記の書き込みのPHP-Statsとかも使ってないので試す環境もないんですが・・・。
Logged

yama
Moderator
*
Posts: 767

MODx研究中


WWW
« Reply #7 on: Jan 11, 2009, 12:45 AM »

ちなみに書き換えるとしたら$PATH_INFO = isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '';のところですよね。
REQUEST_URIで問題ないような気がします。記憶違いだったらすみませんが、同じのような。
Logged
dainiti
Sr. Member
****
Posts: 416



« Reply #8 on: Jan 11, 2009, 05:15 AM »

ZeRo さん、yamaさん いろいろとありがとうございます。

中間報告です。な・なんと、さくらのCGI版の PHP では $_SERVER['PATH_INFO'] が使えないらしい。
そこで CORESERVER でも試してみましたが同じ結果でした。なぜ・・・

どうすればいいのか php.ini に cgi.fix_pathinfo=1 をセットしておき $_SERVER['ORIG_PATH_INFO'] を使うらしいのですがこれでとってきても最終的に $_SERVER['PATH_INFO'] に戻せないのでどうにもなりません ORIG_PATH_INFO を mark_page.php の中で展開する意外方法はないのではないかと思っとります。

REQUEST_URI に関しては ルートドメインからの modx がインストールされているフォルダまでのパスしか取れないようです。サブドメインで運用している場合には http://サブドメイン/modx になってしまいます。しかも mod_rewrite で書き換えられたパスは拾えないようです。まだまだ迷路が続きそうです。
Logged
yama
Moderator
*
Posts: 767

MODx研究中


WWW
« Reply #9 on: Jan 11, 2009, 06:44 AM »

REQUEST_URI そのまんまじゃなくて、何らかの処理を通せば使えそうに思いますが・・
でもさくらだったらbbclone本体に手を入れる方向で、ORIG_PATH_INFOを使うのがいいでしょうね。

あとはHTTP_REFERERを見る方法がありますね。(でもたぶん不安定)
Logged
ZeRo
Sr. Member
****
Posts: 426



WWW
« Reply #10 on: Jan 11, 2009, 06:58 AM »

bbcloneのソースを見たところ、ORIG_がついてる変数がある場合にはそっちを使うようになっていますねぇ。
ORIG_PATH_INFOが取れる状態であればBBCLONEはそっちをリクエストのパスとして扱うようです。
であれば、特にphp.iniだけでうまくいくのかも知れませんが・・・。

PHP4(実際には4.1.0の表記だと思われます?)だと$_SERVERじゃなくて$HTTP_SERVER_VARSの方を使うんですが、そこ古くはないですよねぇ。

bbcloneに渡る前に変数内がクリアされている・・とかいう可能性もあるかもと思ったんですが、MODxのprotectの処置ではPATH_INFOは触ってないみたいです。



« Last Edit: Jan 11, 2009, 07:01 AM by ZeRo » Logged

dainiti
Sr. Member
****
Posts: 416



« Reply #11 on: Jan 11, 2009, 08:22 AM »

<?php
ECHO 'ORIG_PATH_INFO->'.$_SERVER['ORIG_PATH_INFO'].'<br />';
ECHO 'PATH_INFO->'.$_SERVER['PATH_INFO'].'<br />';
?>
上記のような簡単な PHPを適当なサブフォルダに入れて実行してみましたがフォルダ名が何も表示されません。
でも html ファイルに直接 bbclone の呼び出しを入れた場合はフォルダ名は bbclone のページリンクに記録されています。
さくらでもCORESERVERでも同じ結果です。

また、さくらの cgi.fix_pathinfo は最初から 1 にセットされているようで php.ini で指定する必要はなさそうです。

さくらは PHP Version 5.2.8 です。
CORESERVER は PHP Version 5.2.5 です。

結局このまま、また何ヶ月か過ぎてしまいそうです。
« Last Edit: Jan 11, 2009, 08:34 AM by dainiti » Logged
yama
Moderator
*
Posts: 767

MODx研究中


WWW
« Reply #12 on: Jan 11, 2009, 08:46 AM »

そのレベルのデバッグを試せるなら、print_r($GLOBALS) とかやってみるとどうでしょ?
一発解決とはいかなくても、ヒントは得られると思います。
要は、これで得られる値でしかbbcloneに渡すパラメータを処理できません。
Logged
ZeRo
Sr. Member
****
Posts: 426



WWW
« Reply #13 on: Jan 11, 2009, 08:50 AM »

PHPの後ろにtest.php/abc/defとか付ければ表示されるんじゃないかなと思います。
PATH_INFOは、えーと どういえればいいんだろ 
MODxのrewriteがうまく効いているとすると
http://www.example.com/index.php/abc/def
ってやるとPATH_INFOはabc/defが入るってことに あ、うまく説明できないっす
index.phpはデフォルトで省略できるとすれば、index.phpを抜いたアクセスでも/abc/defがPATH_INFOになるはずです。
そういえば、私もこの部分あんまりわかってないかも。 Cry
« Last Edit: Jan 11, 2009, 08:53 AM by ZeRo » Logged

dainiti
Sr. Member
****
Posts: 416



« Reply #14 on: Jan 11, 2009, 08:53 AM »

そのレベルのデバッグを試せるなら、print_r($GLOBALS) とかやってみるとどうでしょ?
一発解決とはいかなくても、ヒントは得られると思います。
要は、これで得られる値でしかbbcloneに渡すパラメータを処理できません。
この程度のレベルです

こんなんが表示されました。
Code:
Array ( [GLOBALS] => Array *RECURSION* [_ENV] => Array ( [PATH] => /usr/local/bin:/usr/bin:/bin [DOCUMENT_ROOT] => /home/mda/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_CHARSET] => Shift_JIS,utf-8;q=0.7,*;q=0.7 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_LANGUAGE] => ja [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a; cookie_test=please_accept_for_session; a581368cd466b3ea77ad98fdc4e8c397=b413c63c73cceb9d2f1de3e7dee2e281; SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a [HTTP_HOST] => www.mda.sakura.ne.jp [HTTP_KEEP_ALIVE] => 300 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 Pathtraq/0.9 [REMOTE_ADDR] => 61.124.14.181 [REMOTE_HOST] => nttksm014181.tksm.nt.adsl.ppp.infoweb.ne.jp [REMOTE_PORT] => 3410 [SCRIPT_FILENAME] => /home/mda/www/modx/test.php [SERVER_ADDR] => 219.94.163.181 [SERVER_ADMIN] => support@sakura.ad.jp [SERVER_NAME] => www.mda.sakura.ne.jp [SERVER_PORT] => 80 [SERVER_SOFTWARE] => Apache/1.3.39 (Unix) [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /modx/test.php [SCRIPT_NAME] => /modx/test.php [PHPRC] => /home/mda/www [REDIRECT_STATUS] => 200 ) [HTTP_ENV_VARS] => Array ( [PATH] => /usr/local/bin:/usr/bin:/bin [DOCUMENT_ROOT] => /home/mda/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_CHARSET] => Shift_JIS,utf-8;q=0.7,*;q=0.7 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_LANGUAGE] => ja [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a; cookie_test=please_accept_for_session; a581368cd466b3ea77ad98fdc4e8c397=b413c63c73cceb9d2f1de3e7dee2e281; SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a [HTTP_HOST] => www.mda.sakura.ne.jp [HTTP_KEEP_ALIVE] => 300 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 Pathtraq/0.9 [REMOTE_ADDR] => 61.124.14.181 [REMOTE_HOST] => nttksm014181.tksm.nt.adsl.ppp.infoweb.ne.jp [REMOTE_PORT] => 3410 [SCRIPT_FILENAME] => /home/mda/www/modx/test.php [SERVER_ADDR] => 219.94.163.181 [SERVER_ADMIN] => support@sakura.ad.jp [SERVER_NAME] => www.mda.sakura.ne.jp [SERVER_PORT] => 80 [SERVER_SOFTWARE] => Apache/1.3.39 (Unix) [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /modx/test.php [SCRIPT_NAME] => /modx/test.php [PHPRC] => /home/mda/www [REDIRECT_STATUS] => 200 ) [_POST] => Array ( ) [HTTP_POST_VARS] => Array ( ) [_GET] => Array ( ) [HTTP_GET_VARS] => Array ( ) [_COOKIE] => Array ( [SN4952f8158bbcc] => f70e05161ae149b2bc42daf89e19569a [cookie_test] => please_accept_for_session [a581368cd466b3ea77ad98fdc4e8c397] => b413c63c73cceb9d2f1de3e7dee2e281 ) [HTTP_COOKIE_VARS] => Array ( [SN4952f8158bbcc] => f70e05161ae149b2bc42daf89e19569a [cookie_test] => please_accept_for_session [a581368cd466b3ea77ad98fdc4e8c397] => b413c63c73cceb9d2f1de3e7dee2e281 ) [_SERVER] => Array ( [PATH] => /usr/local/bin:/usr/bin:/bin [DOCUMENT_ROOT] => /home/mda/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_CHARSET] => Shift_JIS,utf-8;q=0.7,*;q=0.7 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_LANGUAGE] => ja [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a; cookie_test=please_accept_for_session; a581368cd466b3ea77ad98fdc4e8c397=b413c63c73cceb9d2f1de3e7dee2e281; SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a [HTTP_HOST] => www.mda.sakura.ne.jp [HTTP_KEEP_ALIVE] => 300 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 Pathtraq/0.9 [REMOTE_ADDR] => 61.124.14.181 [REMOTE_HOST] => nttksm014181.tksm.nt.adsl.ppp.infoweb.ne.jp [REMOTE_PORT] => 3410 [SCRIPT_FILENAME] => /home/mda/www/modx/test.php [SERVER_ADDR] => 219.94.163.181 [SERVER_ADMIN] => support@sakura.ad.jp [SERVER_NAME] => www.mda.sakura.ne.jp [SERVER_PORT] => 80 [SERVER_SOFTWARE] => Apache/1.3.39 (Unix) [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /modx/test.php [SCRIPT_NAME] => /modx/test.php [PHPRC] => /home/mda/www [REDIRECT_STATUS] => 200 [PHP_SELF] => /modx/test.php [REQUEST_TIME] => 1231685491 [argv] => Array ( ) [argc] => 0 ) [HTTP_SERVER_VARS] => Array ( [PATH] => /usr/local/bin:/usr/bin:/bin [DOCUMENT_ROOT] => /home/mda/www [HTTP_ACCEPT] => text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 [HTTP_ACCEPT_CHARSET] => Shift_JIS,utf-8;q=0.7,*;q=0.7 [HTTP_ACCEPT_ENCODING] => gzip,deflate [HTTP_ACCEPT_LANGUAGE] => ja [HTTP_CONNECTION] => keep-alive [HTTP_COOKIE] => SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a; cookie_test=please_accept_for_session; a581368cd466b3ea77ad98fdc4e8c397=b413c63c73cceb9d2f1de3e7dee2e281; SN4952f8158bbcc=f70e05161ae149b2bc42daf89e19569a [HTTP_HOST] => www.mda.sakura.ne.jp [HTTP_KEEP_ALIVE] => 300 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 Pathtraq/0.9 [REMOTE_ADDR] => 61.124.14.181 [REMOTE_HOST] => nttksm014181.tksm.nt.adsl.ppp.infoweb.ne.jp [REMOTE_PORT] => 3410 [SCRIPT_FILENAME] => /home/mda/www/modx/test.php [SERVER_ADDR] => 219.94.163.181 [SERVER_ADMIN] => support@sakura.ad.jp [SERVER_NAME] => www.mda.sakura.ne.jp [SERVER_PORT] => 80 [SERVER_SOFTWARE] => Apache/1.3.39 (Unix) [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_PROTOCOL] => HTTP/1.1 [REQUEST_METHOD] => GET [QUERY_STRING] => [REQUEST_URI] => /modx/test.php [SCRIPT_NAME] => /modx/test.php [PHPRC] => /home/mda/www [REDIRECT_STATUS] => 200 [PHP_SELF] => /modx/test.php [REQUEST_TIME] => 1231685491 [argv] => Array ( ) [argc] => 0 ) [_FILES] => Array ( ) [HTTP_POST_FILES] => Array ( ) [_REQUEST] => Array ( [SN4952f8158bbcc] => f70e05161ae149b2bc42daf89e19569a [cookie_test] => please_accept_for_session [a581368cd466b3ea77ad98fdc4e8c397] => b413c63c73cceb9d2f1de3e7dee2e281 ) [HTTP_USER_AGENT] => Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5 Pathtraq/0.9 [HTTP_REFERER] => [PATH_INFO] => )
ここの最後の PATH_INFO も空のようです。 ORIG_PATH_INFO も見つかりません。
[REQUEST_URI] => /modx/test.php はちゃんとセットされてますね。
« Last Edit: Jan 11, 2009, 09:04 AM by dainiti » Logged
Pages: [1] 2 3   Go Up
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP

Copyright © 2005-2008 MODxCMS, All rights reserved. Contact Us
Styles by ziworks.com

Powered by SMF | SMF © 2006-2008, Simple Machines LLC

Valid XHTML 1.0! Valid CSS!