人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPでアクセス解析を作成しています。

解析したいページ(index.html)の<body>?</body>の間に<img src="acclog.php">としてアクセス取得用ファイルを追記しているのですが、取得されるURLがindex.htmlではなく、acclog.phpになります。

acclog.phpには以下のようしています(URL取得箇所だけ抜粋)

$uri = getenv('REQUEST_URI');
header("Content-Type: image/jpeg");

どのようにすれば解析ページのURLを取得できるのでしょうか?


●質問者: k27w
●カテゴリ:ウェブ制作
✍キーワード:HTML INDEX JPEG PHP REQUEST_URI
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● pahoo
●10ポイント

PHPだけで img タグの呼び出し元をチェックするのは難しいと思います。

SSIが利用できる環境であれば、

<img src="acclog.php?url=<!--#echo var="DOCUMENT_URI" -->">

としてはどうでしょう。

◎質問者からの返答

>PHPだけで img タグの呼び出し元をチェックするのは難しいと思います。


PHPやCGIのアクセス解析が多く存在するので、出来るはず・・・だと思っているのですが、無理なのでしょうか。


ちなみにSSIが利用できる環境ではないので、上記の方法は無理です。SSIを使わない方法でお願いします。


2 ● M.Mouri
●20ポイント

phpは使ったことがないのですが、acclog.phpで

$url = $_SERVER[”HTTP_REFERER”];

と書けばログを取得できそうです。

掲示板/JavaScript質問板/リファラーの受け渡し - TAG index

PHPでリファラを取得したいです。 var.html内で<form action=”hoge.php”> というとき、hoge.phpで、var.htmlからの投稿のみを受け付けたいからです。 リファラでなくても.. - 人力検索はてな

◎質問者からの返答

それはリファラ(リンク元)のことではありませんか?

試しにやってみましたが、$uriには

acclog.php?referrer=


となるだけです。


3 ● munyaX
●10ポイント

まずなぜそのような結果になっているかですが、

環境変数「REQUEST_URI」は今現在実行されているファイル(PHP)のURIを

表す物です。そして、ブラウザからサーバへのリクエストは、index.htmlと画像(img要素)は別々に行われます。

上記の理由から、PHP上でREQUEST_URIを参照した場合は自分自身のURIが返ってくるという動作で正常です。


img要素を利用されたいなら、pahooさんの方法を利用されるか、何らかの方法でクエリーURLを付加してあげる方法をとるしかないでしょう。

※自分でページ毎につける、JavaScriptを利用するなど

最近のアクセス解析はJavaScriptでとれるだけの情報を取得して、サーバに投げる形式が多いのでそれを踏襲される方が良いかなと、個人的には思います。

Google Analyticsや、商用利用が中心のタグ埋め込み式のアクセス解析は大抵この形です。

http://www.google.com/analytics/ja-JP/

#結局noscript要素でimg要素を指定しますけどね。

◎質問者からの返答

<script type="text/javascript">document.write("<img src='acclog.php?");document.write("url="+document.URL+"'>");</script>

と言う方法でURLは取得出来、acclog.phpから参照する事は出来るのですが、

noscriptの場合は困ってしまいますね。


Google Analytics規模ではなくもっと小規模の、個人の方がフリーで配布している物を想定しています。はてなで答えが得られると思って質問しましたが、難しいようであれば他者のプログラムを解析してみます。


4 ● M.Mouri
●100ポイント ベストアンサー

試しに、手元のPCにapacheとphpをインストールしたら、次の方法でうまくいきました。

index.html:

<html><body><h1>アクセスログテスト</h1><img src="acclog.php"></body></html>

acclog.php:

<?

$url = $_SERVER["HTTP_REFERER"];

$filepointer=fopen("./access.log", "a+");

fputs($filepointer, $url . "\r\n");

fclose($filepointer);

header("Content-Type: image/jpeg");

?>

ブラウザでhttp://localhost/index.htmlにアクセスすると、access.logファイルに「http://localhost/index.html」が記録されました。これはお望みの動作でしょうか。

◎質問者からの返答

全く同じソースをコピーしてファイルを用意しましたが、希望通りできていますね・・。

私のテストしたファイルが悪かったのか、何が原因なのかいまいち掴めませんが、、希望通りに出来ましたので、質問を終了させていただきます。


この質問の為にインストールまでしていただき、大変感謝しております。ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ