-1

I want to make a PHP file, that get some information about user information (browser, platform, version ...) and if user comes from mobile, I'll output a mp3 file with average size: 20 MB.

I expect on average 30,000 users/day, I register with DreamHost Shared Hosting plan, do you think this plan can load such traffic, requests and processing?

what is the best way on PHP to fetch such information, insert into database and output a file based on condition?

4

2 回答 2

1

要检测用户是否在移动设备上,您可以使用php-mobile-detect 类。这比自己编写来适应所有设备要容易得多。

您需要观察流量模式以确定是否需要更大的托管计划。30,000名访客是很多访客。30,000 次网页浏览可能更可能开始(甚至 30,000 次访问)。话虽如此,服务器负载将完全取决于它们何时到来。500 名访问者连接到您的机器同时下载相同的文件可能会导致它崩溃。在作为 DS 的共享主机上,他们可能会尝试让您升级到 VPS 计划或您自己的盒子,如果您收到足够的流量来危及集群上的其他人。如果站点需要太多资源,它们还将启用限制。

在提供链接和限制合法流量方面,您可以验证他们的 IP地址$_SERVER['REMOTE_ADDR']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 回答
0

要获取用户浏览器,您可以使用:$_SERVER['HTTP_USER_AGENT']您可以参考$_SERVER以获取更多信息。

于 2013-05-06T06:36:16.930 回答