Php拷贝CPU消耗

Php拷贝CPU消耗,php,javascript,cpu,Php,Javascript,Cpu,我正在创建一个允许用户通过JavaScript插件查看文件的网站 为了做到这一点,并维护文件的安全性,我将在每次访问JavaScript插件时创建原始文件的唯一副本 原始文件的最大容量为30mb,对于系统的多个用户,该文件的扩展如何?假设有100人创建并访问该文件的副本。您可以通过创建一个htaccess重写来将用户引用到PHP脚本: RewriteEngine On RewriteRule ^download/([^/]+) /lib/download.php?file=$1 [QSA] 这

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

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


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

您可以通过创建一个htaccess重写来将用户引用到PHP脚本:

RewriteEngine On
RewriteRule ^download/([^/]+) /lib/download.php?file=$1 [QSA]
这将把任何请求转发到
yourdomain.com/download/anyfilehere.mp3?one\u time\u token=ABCDEFG
lib/download.php
,并将
$\u GET['file']
设置为
anyfilehere.mp3
一次性令牌
$\u 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头类型
  • 阅读
  • 将一次性令牌限制为仅在特定时间范围内有效(并通知您的用户),而不是只允许下载一次
  • 如果用户取消下载,因此无法再次下载,您的系统将如何反应
  • 如果下载失败怎么办?他们需要请求新的下载链接吗
  • 如果是流式MP3文件,请确保搜索工作正常(如果您在MP3流式传输到的位置之外进行搜索,则很可能不会进行搜索,因为它会为MP3文件创建新的请求)

我无法想象在任何情况下,只要不使用写访问,就使用原始文件是不安全的?@bwoebi OP提到的内容可能在有人创建提供音乐/声音的服务的情况下很有用,但要确保他们不能只是将URL复制粘贴到MP3,然后将MP3提供给他们(或共享指向MP3文件的链接)@H2Ooooo mod_重写到一个可以访问磁盘上其他数据的中心PHP文件?@bwoebi同意-复制绝不是实现这一点的方法。重写和PHP验证(例如下载令牌)要好1000倍。你能给我举个例子吗?我如何实现令牌?是否有特定于PHP的函数?@James不应该是这样的oo很难生成随机ID并将其放入数据库(如果必须,请使用
uniqid
),然后将该ID发送给用户并将其用于链接。您的数据库应该是
ID | token | ip | valid
ID | token | ip | valid | valid |直到
根据您使用的方法。ip是可选的,但可能很好,这样您就可以看到是否有一个用户正在下载相同的文件10亿次。非常感谢,非常爱您哈哈哈 :)