Php复制CPU消耗

时间:2013-05-21 09:12:43

标签: php javascript cpu

我正在创建一个允许用户通过JavaScript插件查看文件的网站。

为了做到这一点,并保持文件的安全性,我将在每次访问JavaScript插件时创建原始文件的一次性唯一副本。

原始文件最大为30mb,如何为系统的多个用户进行扩展?假设是否有100人创建并访问该文件的副本。

1 个答案:

答案 0 :(得分:1)

您可以通过创建htaccess重写来将用户引用到PHP脚本来执行此操作:

RewriteEngine On
RewriteRule ^download/([^/]+) /lib/download.php?file=$1 [QSA]

这会将任何请求转发至yourdomain.com/download/anyfilehere.mp3?one_time_token=ABCDEFGlib/download.php,并将$_GET['file']设置为anyfilehere.mp3。我们会使用one_time_token转发$_GET [QSA]参数。

download.php可能看起来像这样:

<?php
    if (!empty($_GET['file'])) {
        if (!empty($_GET['one_time_token'])) {
            if (TokenOK($_GET['one_time_token'])) { //Create a function called TokenOK where you look up the download token in eg. a database
                $fileName = '/var/www/downloadfolder/' . $_GET['file'];
                if (file_exists($fileName)) {
                    ExpireToken($_GET['one_time_token']); //Create a function called ExpireToken where you expire the token in eg. the database
                    readfile($fileName); //Read the file to the user
                    die();
                } else {
                    die('Error: file not found');
                }
            } else {
                die('Error: token is not OK');
            }
        } else {
            die('Error: token is not specified');
        }
    } else {
        die('Error: file is not specified');
    }
?>

需要考虑的事项:

  • 输出指定文件内容类型的mime标头类型
  • 阅读this PHP manual entry on readfile
  • 将一次性令牌限制为仅在特定时间范围内有效(并通知您的用户),而不是仅允许下载一次
  • 如果用户取消下载,您的系统将如何反应,因此无法再次下载?
  • 如果下载失败怎么办?他们是否需要申请新的下载链接?
  • 如果是流媒体MP3文件,请确保搜索有效(如果您在MP3播放的地方以外寻找,很可能不会,因为它会创建一个新的MP3文件请求)