繁体   English   中英

使用htaccess和php的mp3带宽节流

[英]mp3 bandwidth throttle using htaccess and php

尝试删除我的网站的机器人和恶意用户正将我摧毁。

我尝试通过mod_rewrite对mp3文件的所有请求到一个php脚本来制作带宽限制器,该脚本将跟踪每个ip并限制每个每小时可以下载多少。 效果很好,但对某些用户而言,链接不是直接链接到mp3文件的链接,却造成了很多问题。

我尝试了各种强制下载标头,但对某些用户有效的方法对其他用户无效。

现在,问题是,是否可以保持直接链接到mp3文件,并且每当有人单击mp3文件以同时运行跟踪php脚本(允许或拒绝该请求)时,是否可能?

谢谢!

(服务器没有mod_bandwidth或任何其他有用的mod)

为什么不将登录页面作为一个PHP脚本来检查用户的ip,并根据其输出链接或隐藏链接,而不是在用户单击链接时同时跟踪使用情况? 如果文件存储在明显的文件夹中,例如yoursite / music / artist / song.mp3,则可以为它们创建软链接,以免混淆路径。 在Linux服务器上,您可以使用symlink()php函数创建到/ music目录的软链接,并将路径输出为yoursite / 3awE2afeefef4a323 / artist / song.mp3,该路径仍应是该文件的直接链接,例如:

<?php
$target = 'music/';
$link = 'a322ewrr323211';
symlink($target, $link);
?>
<html>
<body>
     <a href="a322ewrr323211/artist/song.mp3">link</a>
</body>
</html>

然后在每晚或创建24小时后定期删除这些符号链接。

一个mod_rewrite解决方案足够优雅,并且可以保持链接直接。

.htaccess ,将所有.mp3链接重写为PHP脚本:

RewriteEngine on
RewriteRule \.mp3$ download.php

在PHP文件中,我们可以提取请求的URI,验证用户的IP并根据该验证返回适当的标头。

<?php

// Set variables
$requestedFile = trim($_SERVER['REQUEST_URI'], '/');
$ip = $_SERVER['REMOTE_ADDR'];
$protocol = isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0';

// If the file does not exist, throw a 404 error
if (!file_exists($requestedFile)) {
    header($protocol . ' 404 Not Found');
}

// Is the user allowed to download?
function validateDownload($ip) {
    /**
     * Put your IP tracking and validation code here, returning `TRUE`
     * or `FALSE`.
     */

    return TRUE;
}

// Validate and perform appropriate action
$canDownload = validateDownload($ip);

if ($canDownload) {
    header('Content-Disposition: attachment; filename="' . basename($requestedFile) . '"');
    header('Content-type: audio/mpeg');
    readfile($requestedFile);
} else {
    header($protocol . ' 403 Forbidden');
}

现在,所有链接保持直接,您正在将适当的标头返回给用户代理,提示下载或拒绝访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM