php - 使用 PHP readfile 隐藏流 URL

标签 php javascript

我需要隐藏音频流的 url,所以我认为既然我有一个使用 readfile(); 来执行此操作的下载脚本,我也可以这样做,但我没有确定如何在 javascript 中操作它。事实上,我不知道,甚至不确定是否可以这样做。

到目前为止,我有一个 PHP 文件,可以通过 javascript 访问该文件,以便在单击播放按钮时从 ID 获取轨道的 URL。

$T_ID = mysqli_real_escape_string($con, $_GET['t_id']);
$qry = "SELECT url FROM tracks WHERE T_ID = $T_ID";
$result = mysqli_query($con, $qry);
$row = mysqli_fetch_array($result);
$url = $row['url'];
$path_parts = pathinfo($url); //get path info
$file_name  = $path_parts['basename']; //only include mp3 track just incase path added in there
$file_path  = 'uploads/' . $file_name; //add path
echo $file_path;

javascript 仅使用其中的 url 来指定 new Audio();。但是,任何知道打开控制台并查看网络选项卡的人都可以找到轨道的 URL 并下载它。这根本不是我想要的,也不是我的用户想要的。

我的初步想法是将 echo($file_path) 替换为 readfile($file_path) 但我知道它需要以某种方式在 javascript 中进行操作。如果 PHP 以二进制形式读取文件,那么 javascript 也可以这样做以流式传输它吗?

最佳答案

通过使用 readfile(),您所做的只是将 php 脚本放入 URL 以供下载。 javascript Audio() 对象仍然获取该 URL(并且可能在它全部加载之前开始播放),就像它使用文件的直接 url 一样。它不是流式传输它。您只是隐藏了文件的 URL。

如果您想提供受限访问,那么这是一个很好的方法,但如果任何人仍然可以使用这个新 URL 下载,那么您就没有保护任何东西,除了文件的实际位置。

此外,请记住为正确的 MIME 类型设置 header ,例如

header('Content-Type: audio/mpeg');
header('Content-Length: '.filesize($file_path));
readfile($file_path);

您可能还想设置缓存过期 header 等。

关于php - 使用 PHP readfile 隐藏流 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034682/

相关文章:

php - 使用 javascript 的简单 php 网站

php - 如何在 php 类上使用准备好的语句(命名参数)

php - 使用 wkhtmltopdf 设置横向

javascript - Dean Edwards 的 ie7-js 有多可行?

javascript - 使用 JS 或 HTML 更改单选按钮单击时的图像

php - Mongo 中的 Map Reduce,将 mongo 查询转换为 php mongo

php - 如何使用 PDO 确定列类型?

javascript - ".this"没有修改原始对象

javascript - 如何迭代提交时传递的 knockout 表单元素

javascript - 如何在jquery中解析这个json?