動画サイトを運営していて、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 日以上))