0

動画サイトを運営していて、1 日に一定量の動画だけを視聴できるようにしたいと考えています。

これを行う最善の方法は何ですか?

私は現在、基本的に.phpスクリプトでこれを行っています:

viewvideo.php (動画の html)

<?
$_SESSION['video'] = 'myvid.mp4';
$_SESSION['hash'] = md5($randomhash); //not a hash of filename etc. just random

?> then in the html :  <video src='video.php?hash=<?=$_SESSION['hash'];?>'>

video.php (許可されている場合はビデオ ファイルを提供します)

<?php
if (canThisIpViewVideo()) {
      // can view the video ok

if ($_SESSION['hash'] == $_GET['hash']) {
      // next couple of lines get the video filename (from session), add one to list of ips (so canThisIpViewVideo has data to read from), then readfile's the .mp4 vid
$videofile = $_SESSION['video'];
mysql_query("insert into viewed (ip,date) values('$ip',NOW())"); // i do sanatize input
session_destroy(); // so can only be viewed once per hash
readfile("videos/$videofile");
die();
}

これは、!canThisIpViewVideo() の場合に私がサーバーする短い (14 秒) ビデオでは問題なく動作しますが、通常のサイズのビデオでは、奇妙な読み込みが行われます (ビデオ プレーヤーはそれを再生せず、何年も (20 ~ 40 秒) 待機してから再生します。いつでも(再生が開始される前に)ユーザーが再生を再度押すと、再度要求されます(ビデオプレーヤーのバグです)

.htaccess で (100 件の動画全体に対する) リクエストを 1 日あたりの特定の数に制限する方法はありますか?

1 日あたりのビューを制限しているほとんどの大規模サイトでは、どのようにこれを行っているのでしょうか? readfile は私にはうまくいかないようです。readfile を header("Location: $fullvideourl"); に置き換えた場合 100% 正常に動作します。

(また、mysql リクエストを memcached のコードに置き換えると、より簡単に動作するようになります (古いデータの自動期限切れ (1 日以上))

4

1 に答える 1

2

IP アドレスに制限するのは悪い考えです。たとえば、ラトビアの高校には 1 つの IP があります。その IP の背後には約 10000 人のユーザーがいます。同じことが、1 つのパブリック IP を持つ大企業にも当てはまります。ただし、それを行いたい場合は、ユーザーがビデオを開いたときに IP アドレスをログに記録するだけです。ビデオを表示する前に、その IP から何回ビデオを視聴したかを確認します。制限に達した場合は、それをユーザーに表示します。また、DB ではビューのみをカウントできます。
mysql_query("UPDATE views SET count = count + 1 WHERE date = '$today' AND ip = '$IP'")このクエリが 0 を返す場合、今日のその IP の行を挿入する必要があります。

編集:これを参照してください:IPアドレスで識別されるユーザーへのユーザーアクセスを1日5回のみに制限する

于 2013-03-24T15:27:12.640 に答える