参考になった回答には100ポイント差し上げます。


携帯サイトに関する質問です。
自分のHPがhttp://q.hatena.ne.jp/だとすると


『自分のページへ行く』というリンクをクリックした時
移動する子ページのURLは
http://q.hatena.ne.jp/(ランダム英数)
のように、訪問者それぞれのURLを割り振りたいです。
同じ訪問者でも、クリックするたびに再度新しいURLが振り当てられます。
※自分のページといってもアカウントを取得するものではありません。
一時的に訪問者に独自のURLを振り当てるのが目的です。

例:一度目のアクセス
http://q.hatena.ne.jp/z56qr6v
例:二度目のアクセス
http://q.hatena.ne.jp/9az26qr
例:三度目のアクセス
http://q.hatena.ne.jp/a5rwqz7

このようにアクセスする度にURLを割り振り
それぞれのURLごとにブラウザ等のログを保存できるようにしたいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/05/08 16:41:06
  • 終了:2008/05/13 23:26:57

ベストアンサー

id:cabeliau No.2

cabeliau回答回数8ベストアンサー獲得回数12008/05/08 19:59:04

ポイント100pt

お力になれるか分かりませんが、お答えします。

まず、ランダムな文字列を生成するのでしたら、「String::Random」が有効です。


use String::Random;

$uid = String::Random->new->randregex('[A-Za-z0-9]{7}');

上記スクリプトの「7」の部分が生成したい文字列の桁数です。これで、フォルダとindex.htm等のファイルを作成します。


#フォルダの存在確認

if (!-d "./$uid"){

#フォルダ生成

mkdir "./$uid";

#フォルダのパミッション(属性)を777に変更

chmod 0777, "./$uid";

}

#index.htmに表示させたいファイルを読み込む

open (FILE,"./temp.txt");←任意のデータ

@data = <FILE>;←@dataに挿入

close FILE;

#index.htmファイルの存在確認

if(-f './$uid/index.htm'){

#index.htmの生成

open (FILE,">>./$uid/index.htm");

#初期に表示させたい内容を挿入

print FILE "@data";

close FILE;

#index.htmのパミッション(属性)を666に変更←今後も変更する場合

chmod 0666, "./$uid/index.htm";

}

最後に、location関数を使って目的のページへ飛ばします。


print "Location:http://example.com/$uid/index.htm\n\n";


アクセスしてきた端末情報(ブラウザ情報等)を取得するのでしたら、index.htmではなくindex.cgi等

のスクリプトに変更し、ページを表示させる前に端末情報を取得し、ログに保存する手もあります。

index.cgiの内容(下記を先ほどお話したtemp.txtに入れて、index.htmをindex.cgiに変更)


open (FILE,">>./$uid/$uid.dat");

print FILE "$ENV{'HTTP_USER_AGENT'}";

close FILE;

print "Content-type:text/html; charset=Shift_JIS\n\n";

print <<"EOF";

<html>

<head>

<title></title>

</head>

<body>

--ここに表示させたい内容を記述する--

</body>

</html>

EOF

exit;

あくまで参考まで。ファイルの削除については、いまひとつピンときませんでした。すみません。

id:happy778

回答ありがとうございました。

参考になりましたので100ポイント差し上げます。

2008/05/13 23:26:32

その他の回答(2件)

id:y-kawaz No.1

y-kawaz回答回数1419ベストアンサー獲得回数2252008/05/08 17:35:17

1. WEBサイトのコンテンツを本来のDocumentRootとは違うディレクトリに置いておきます。

2. トップページにアクセスが来たらユニーク文字列を生成して、実コンテンツディレクトリへのシンボリックリンクを作成する。

3. シンボリックリンクを作ったらそのURLへリダイレクトさせる。

こうすることで、コンテンツが相対パスで作成されている限りユーザはユニークに作成したパスの下で移動することになります。

以下にサイトURLが http://example.jp/ でこれに対応する DocumentRoot が /var/www/html で、実コンテンツは /var/www/real にあるとして説明してみます。

 URL               対応ファイル
 http://example.jp/   →     /var/www/html/index.php(シンボリックリンク作成 ln -s ../real z56qr6v )
  ↓ Locationジャンプ        
  http://example.jp/z56qr6v/  →  /var/www/html/z56qr6v/index.html -> /var/www/real/index.html
 ↓ (ユーザがp2.htmlをクリック)
  http://example.jp/x56qr6v/p2.html → /var/www/html/z56qr6v/p2.html -> /var/www/real/p2.html

なんとなくイメージつかめますでしょうか?

あとは、古いシンボリックリンクは不要になるので cron で find /var/www/real/ -type l -mtime +1 -exec rm {} \; などを定期的に実行して削除する必要もあると思います。

id:happy778

回答ありがとうございます。

すいません、初心者なのでまったくわかりません。

初心者用に詳しく説明してもらってもいいですか?

スクリプトなどがあればそれも教えて頂けると幸いです。

2008/05/08 19:58:02
id:cabeliau No.2

cabeliau回答回数8ベストアンサー獲得回数12008/05/08 19:59:04ここでベストアンサー

ポイント100pt

お力になれるか分かりませんが、お答えします。

まず、ランダムな文字列を生成するのでしたら、「String::Random」が有効です。


use String::Random;

$uid = String::Random->new->randregex('[A-Za-z0-9]{7}');

上記スクリプトの「7」の部分が生成したい文字列の桁数です。これで、フォルダとindex.htm等のファイルを作成します。


#フォルダの存在確認

if (!-d "./$uid"){

#フォルダ生成

mkdir "./$uid";

#フォルダのパミッション(属性)を777に変更

chmod 0777, "./$uid";

}

#index.htmに表示させたいファイルを読み込む

open (FILE,"./temp.txt");←任意のデータ

@data = <FILE>;←@dataに挿入

close FILE;

#index.htmファイルの存在確認

if(-f './$uid/index.htm'){

#index.htmの生成

open (FILE,">>./$uid/index.htm");

#初期に表示させたい内容を挿入

print FILE "@data";

close FILE;

#index.htmのパミッション(属性)を666に変更←今後も変更する場合

chmod 0666, "./$uid/index.htm";

}

最後に、location関数を使って目的のページへ飛ばします。


print "Location:http://example.com/$uid/index.htm\n\n";


アクセスしてきた端末情報(ブラウザ情報等)を取得するのでしたら、index.htmではなくindex.cgi等

のスクリプトに変更し、ページを表示させる前に端末情報を取得し、ログに保存する手もあります。

index.cgiの内容(下記を先ほどお話したtemp.txtに入れて、index.htmをindex.cgiに変更)


open (FILE,">>./$uid/$uid.dat");

print FILE "$ENV{'HTTP_USER_AGENT'}";

close FILE;

print "Content-type:text/html; charset=Shift_JIS\n\n";

print <<"EOF";

<html>

<head>

<title></title>

</head>

<body>

--ここに表示させたい内容を記述する--

</body>

</html>

EOF

exit;

あくまで参考まで。ファイルの削除については、いまひとつピンときませんでした。すみません。

id:happy778

回答ありがとうございました。

参考になりましたので100ポイント差し上げます。

2008/05/13 23:26:32
id:ken33jp No.3

ken33jp回答回数928ベストアンサー獲得回数132008/05/08 22:19:46

URLの後ろだけランダム文字列を発生させるけど、

表示するページは同じなんですよね。

たんにランダムにURL生成時に文字列発生させる。

.htascessで、URL等の設定する

http://q.hatena.ne.jp/answer

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません