-1

ユーザー情報 (ブラウザー、プラットフォーム、バージョンなど) に関する情報を取得する PHP ファイルを作成したいと考えています。ユーザーがモバイルからアクセスした場合は、平均サイズが 20 MB の mp3 ファイルを出力します。

私は平均 30,000 ユーザー/日を見込んでおり、DreamHost 共有ホスティング プランに登録しています。このプランは、そのようなトラフィック、リクエスト、および処理をロードできると思いますか?

そのような情報を取得し、データベースに挿入し、条件に基づいてファイルを出力するためのPHPでの最良の方法は何ですか?

4

2 に答える 2

1

ユーザーがモバイル デバイスを使用しているかどうかを検出するには、php-mobile-detect クラスを使用できます。すべてのデバイスに対応するために独自に作成するよりもはるかに簡単です。

より大きなホスティング プランが必要かどうかを判断するには、トラフィック パターンを監視する必要があります。30,000人の来場者はたくさんの来場者です。最初は 30,000 ページビュー (または 30,000 訪問) になる可能性が高くなります。そうは言っても、サーバーの負荷はすべて、いつ来るかによって異なります。500 人の訪問者があなたのマシンに接続し、同じファイルを一度にダウンロードすると、ダウンする可能性があります。DS としての共有ホスティングでは、クラスター上の他の人を危険にさらすのに十分なトラフィックを受信して​​いる場合、VPS プランまたは 1 人でいるボックスにアップグレードさせようとする可能性があります。また、サイトが必要とするリソースが多すぎる場合は、スロットリングも有効になります。

リンクを提供し、正当なトラフィックを制限するという点では、ユーザーの IP アドレス ( $_SERVER['REMOTE_ADDR'])、セッション ID ( SESSION())、表示時間を確認し、それをヘッダー リダイレクト用のスクリプトに渡して、共有リンクへのアクセスを防ぐことができます。

http://domain.com/download.php?f=04293D&ts=1367827755&t=25d55ad283aa400af464c76d713c07ad

ファイルを配信するページで、それが同じユーザー、同じセッション (ローカル ネットワーク上でリンクしている場合)、およびタイムスタンプであることを確認できます。

<?php
    session_start();
    if(!empty($_GET['f'])){
    $f = $_GET['f'];
    } else {
     exit();
    }

    if(!empty($_GET['ts'])&&preg_match('!^[0-9]+$!',$_GET['ts'])){
     $tsIn = $_GET['ts'];
    } else {
     exit();
    }

    $testHash = md5($_SERVER['REMOTE_ADDR'].session_id().$tsIn.'s@lt3d');

    if(!empty($_GET['t'])&&$testHash==$_GET['t']){

    // We'll be outputting an MP3
    header('Content-type: audio/mpeg');

    // It will be called audio.mp3
    header('Content-Disposition: attachment; filename="audio.mp3"');

    // To prevent mining the MP3 source is in the safe folder named '/._mp3s_safe/'
    readfile($_SERVER['DOCUMENT_ROOT'].'/._mp3s_safe/original.mp3');

    } else {
      exit();
    }
?>

このコードには含めていませんが、ファイルが一定時間内に要求されたかどうかを確認することもできます。また、ユーザーに電子メール アドレスの提供を求めることでユーザーを確認し、トラフィックが問題になる場合はファイルをダウンロードするためのリンクを電子メールで送信することもできます。また、タイムスタンプ ハッシュ法を使用して、誰かがダウンロード用のプログラムを使用しているかどうかを確認することもできます。ファイルのダウンロードが速すぎるか、他のダウンロードが多すぎる場合は、ファイルを待機させるか、マシンからのトラフィックが多すぎるというエラーでスクリプトを停止させることができます。

于 2013-05-06T08:21:01.497 に答える