サイト内ランキングの作り方 - PHPプロ!Q&A掲示板

2862

  • 0P

サイト内ランキングの作り方

質問日時 / 2010年9月9日 06:46    回答数 / 6件

Questioner:  neo16  このエントリーをはてなブックマークに追加 

キーワード / ランキング   

サイト内で、このディレクトリのこのファイルに何回アクセスされて、サイト全体でこのファイルへのアクセスが何番目に多い、というランキングをトップページに表示させたいです。

トップページのあるディレクトリにテキストファイルを作り、
directory/file.html n   //nはアクセス回数
というような内容を書き込もうとしたのですが、2回目以降のアクセスのときに、nを書き換えるコードを書いても、うまく反映されません。

本来なら、そのテキストファイルへの書き込み内容が反映されないところを質問すべきなのですが、もっと効率のよいランキングの作り方があるのでは、と思い、こちらで質問させていただきました。
何かいいランキングの案がある方、ご教示よろしくお願いいたします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01shimix>2回目以降のアクセスのときに、nを書き換えるコード
┣A02pannnaapacheのアクセスログを参照出来れば、そこから各ペー
┣A03magicflute2ページではなくファイルへのアクセス数ですか? アク
┣A04shimix#あぁ、そうですね。他の方のレスのとおり「どうやっ
┗A05neo16自分の稚拙な文章で皆様を惑わせてしまい、申し訳あり
 ┗A05-1pannna# closeした内容かもしれませんが一応… >自分の初

回答一覧

並び替え:

A01
answerershimix [9月9日 08:12]

>2回目以降のアクセスのときに、nを書き換えるコードを書いても、うまく反映されません。

どういうコードを書いているのでしょう?それがわからないとアドバイスも出来ませんが・・

>もっと効率のよいランキングの作り方があるのでは、と思い、こちらで質問させていただきました。

データベースを使うという選択肢はありませんか?あらかじめディレクトリ/ファイル名がキーのレコードを作成しておけば、繋いでSQL文(update)を投げるだけです。あとでアクセス数順に呼び出すのもorderで指定するだけで済みます。

この意見に回答する

ツリーへ TOPへ

A02
answererpannna [9月9日 15:32] (最終編集:9月10日 15:43)

apacheのアクセスログを参照出来れば、そこから各ページURLの数をカウントするという手もあります。
リアルタイムではなくcronなどのバッチ処理になりますので即時性はありません。
ただし、アクセスログのファイルサイズが大きくなればなるほど解析処理が重くなるので、
アクセスログは日次で作るようにしますけどね。

即時性を求めたり、レンタルサーバなどでアクセスログが見れないのであれば、
shimixさんが書かれているように、DBかファイルに書いておくのが一番かと思われます。
ただ、ページを表示するたびにDBまたはファイルのI/Oが発生するので、
特にファイルの場合は排他制御をきちんとしないといけません。

また、nを書き換えるコードを書いてもうまく反映されないのは、
nの値+1がきちんと書き込めていないか、nの値が取れていない可能性が高いかと。
echoなりprintなりで意図した値の取得/計算/出力が出来ているかまずは確認すれば
すぐ解決出来るかと思います。
ファイルがきちんと出来ているのであれば、キャッシュが関係している可能性があるので、
キャッシュを無効化してみるといいかもしれません。


(2010.09.10追記)
magicflute2さんがレスされている通り、カウントする対象がページ(URL)なのか
それともファイルなのかが明確じゃないですね。
質問する場合は「自分が回答する立場だった場合に質問されて分かるように」明確にして
質問するようにしてもらうと助かります。

# 後出しの内容が増えれば増えるほど回答する側の意欲は無くなっていきます

この意見に回答する

ツリーへ TOPへ

A03
answerermagicflute2 [9月10日 03:12] (最終編集:9月10日 03:24)

ページではなくファイルへのアクセス数ですか?
アクセス解析の対象は、何になるのでしょうか。

あと、*.htmlへのアクセス解析は
どのようにしているのでしょうか?

この意見に回答する

ツリーへ TOPへ

A04
answerershimix [9月10日 13:08]

#あぁ、そうですね。他の方のレスのとおり「どうやって解析するのか」が何も提示されていませんね。

私はhtmlソースに1x1サイズとかのimg要素で埋め込むなどで呼び出すと推測したのですが。リファラはアテにならないのでQueryStringもしくはpathinfoで呼び出し元の情報を渡すかな・・と推測(何の根拠もないので邪推?)しましたが、外している可能性も大ですかね。

そのあたりもキチンと提示していただくといいと思います>質問者さん。

この意見に回答する

ツリーへ TOPへ

A05
answererneo16 [9月10日 17:40] (最終編集:9月10日 17:43)

自分の稚拙な文章で皆様を惑わせてしまい、申し訳ありません。
自分の初心者丸出しのコードを見られるのがいやで、このような中途半端な質問となってしまいました。

ランキングについてですが、すべてのページにphpを使用し、アクセスしたときにデータベースに情報を送信して作りたいと思います。

本当は、ランキングのを作る方法を教えていただきたかったのですが、不適切な文章で真意をうまく伝えられず、とても後悔しています。
自分のせいで皆様の貴重な時間を無駄に使用させてしまって、本当に申し訳ありません。
これからは十分注意して利用したいと思います。

この意見に回答する

ツリーへ TOPへ

A05-1
replyerpannna [9月14日 17:12] (最終編集:9月14日 17:14)

# closeした内容かもしれませんが一応…

>自分の初心者丸出しのコードを見られるのがいやで、このような中途半端な質問となってしまいました。

誰でもはじめは初心者ですし、指摘されないと気付かないものは非常に多いです。
指摘されることはいいこと(仕事でもこれはダメだと思った相手には指摘すらしません)なので、
出せる情報はできるだけ出したほうがいいです。

>ランキングについてですが、すべてのページにphpを使用し、アクセスしたときにデータベースに情報を送信して作りたいと思います。

ページ単位でのアクセス数の集計であれば、shimixさんやneo16さんが書かれたように
各ページのphpファイルにデータベースへ書き込むためのソースを書けばいいですね。

テーブル設計は多分こんな感じになるでしょうか?
・ユニークキー(DBのベンダーによって欲しかったりいらなかったり)
・ページURL(phpファイル名が妥当と思います)
・アクセス数
・ページの日本語説明(トップページ、一覧ページ等のページの説明)

アクセス数をカウントアップする場合は、ページURLを条件句に設定して
アクセス数+1をupdateする形でいいですね。

取得する場合はorder句にアクセス数の降順(多い順)、昇順(少ない順)を指定して、
ページの日本語説明とアクセス数を取得するようにすれば、ページの説明とアクセス数が
取れるはずなので、あとはHTMLに書き出してあげるだけで済むかと思います。

ただ、ユニークユーザ単位でのアクセス数制限がある場合は、色々とチェックを追加する必要が
ありますが、まずはそういった制限なしで作成してみて、それからアクセス数制限をかけたものを
作ってみたほうがいいかと思います。

>本当は、ランキングのを作る方法を教えていただきたかったのですが、不適切な文章で真意をうまく伝えられず、とても後悔しています。

自分が質問を受けた場合に置き換えてみると、どういう質問をされれば分かりやすいかが
理解出来るかと思います。5W1Hではないですが、筋道を立てた質問だと回答側も分かりやすいですね

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
動的なURLを静的に見せる方法
 このエントリーをはてなブックマークに追加 
A
普通に考えて、mod_rewrite でしょうね。 http://www.nishishi.com/blog/2006/01/mod_rewrite_url.html...

>>続きを読む

GETのままでは検索エンジンのロボットが拾ってくれなかったためにSEO対策として有効だと言われていますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)