We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 6350
    • 421 Posts
    約2ヶ月ほど悩んでいますが自分の力だけではどうしようもないようです。

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

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

    先頭
    $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'] : '';

              ・
              ・
              ・
    最後
    $_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);

      • 33014 ☆ A M B ☆
      • 1,231 Posts
      $_SERVER[’PATH_INFO’]が取得できてないみたいですね。何らかの方法があると思うので、あとで調べてみます。
        • 33488
        • 429 Posts
        最初にBBCLONEをインクルードして実行させてからMODxのコアを動かせばよいんじゃないっすかね?
        昔、アクセス解析を埋め込んでたときはMODx動かす前にINCLUDEで処理させてたりしていました。
          • 26012
          • 324 Posts
          こんにちは

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

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

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

          参考 : ダンププラグイン

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

           プラグイン名 : 任意
           設定 : 特になし
           システムイベント : コード内のcase文と同じイベントをチェック
           注意 : $logFilePath を設定する行を書き換えてください。 #重要#
           コード: 
          // ログインしている時だけ動作
          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

            • 6350
            • 421 Posts
            Quote from: ZeRo at Jan 10, 2009, 08:55 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 さんのように具体的にコードを提示してもらえると理解しやすいのですが・・・もちろん自分の勉強不足を棚に上げての話なので気を悪くしないでください。
              • 33014 ☆ A M B ☆
              • 1,231 Posts
              そのへんのやりとりはphpを全然理解してなかった頃の書き込みですね。今試したらあっさりうまくいくかも。

              たとえば$_SERVER[’PATH_INFO’]="test" なんてふうにするとどうなりますか?
              それで実際にwww.example.com/testという文字列が表示されるようになったら、解決の道筋がついたようなものだと思います。
              でも$_SERVER変数をこんなふうに書き換えちゃうのって、作法的にどうなのかという気がしないでもないですが。他がおかしくなりそうです。
                • 33488
                • 429 Posts
                なんか、かなり懐かしい書き込みですね。
                そういえば、その頃はBBCLONEを使ってたような・・・。
                PATH_INFOが問題であるならば、REQUEST_URIで代替がよいかもですね。
                最近、BBCLONEも上記の書き込みのPHP-Statsとかも使ってないので試す環境もないんですが・・・。
                  • 33014 ☆ A M B ☆
                  • 1,231 Posts
                  ちなみに書き換えるとしたら$PATH_INFO = isset($_SERVER[’PATH_INFO’]) ? $_SERVER[’PATH_INFO’] : ’’;のところですよね。
                  REQUEST_URIで問題ないような気がします。記憶違いだったらすみませんが、同じのような。
                    • 6350
                    • 421 Posts
                    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 で書き換えられたパスは拾えないようです。まだまだ迷路が続きそうです。
                      • 33014 ☆ A M B ☆
                      • 1,231 Posts
                      REQUEST_URI そのまんまじゃなくて、何らかの処理を通せば使えそうに思いますが・・
                      でもさくらだったらbbclone本体に手を入れる方向で、ORIG_PATH_INFOを使うのがいいでしょうね。

                      あとはHTTP_REFERERを見る方法がありますね。(でもたぶん不安定)