根据条件输出文件 - PHP

时间:2013-05-06 06:25:00

标签: php dreamhost

我想创建一个PHP文件,获取有关用户信息(浏览器,平台,版本......)的一些信息,如果用户来自移动设备,我将输出一个平均大小为20 MB的mp3文件。< / p>

我预计平均每天有30,000名用户,我在DreamHost共享托管计划中注册,您认为此计划可以加载此类流量,请求和处理吗?

PHP获取此类信息,插入数据库并根据条件输出文件的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

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

您需要观看流量模式,以确定是否需要更大的托管计划。 30,000名访客是很多访客。 30,000次综合浏览量可能更有可能开始(甚至30,000次访问)。据说服务器负载将全部取决于它们何时到来。连接到您的计算机的500名访问者同时下载同一文件可能会导致其关闭。在作为DS的共享主机上,如果您收到足够的流量来破坏群集中的其他人,他们可能会尝试让您升级到VPS计划或自己的盒子。 They will also enable throttling if the site requires too much resources.

在提供链接和限制合法流量方面,您可以验证其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();
    }
?>

我没有将其包含在此代码中,但您甚至可以检查文件是否在一定时间内被请求。您还可以通过要求用户提供其电子邮件地址来验证用户,然后通过电子邮件向他们发送链接以在流量出现问题时下载文件。您还可以使用时间戳哈希方法来查看某人是否正在使用程序进行下载。如果他们下载的文件过快或打开了太多其他下载,那么您可以让他们等待文件或让脚本停止,并显示有关其计算机流量过多的错误。

答案 1 :(得分:0)

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