【发布时间】:2019-01-09 05:47:21
【问题描述】:
我有一个网站,用户必须付费才能下载他们在该网站上创建的视频。因此,我需要隐藏下载路径。
我有下载按钮所在的php页面-
<form id="dl_script_form" action="dl-script.php" method="post" target="_blank">
<input name="userID" type="hidden" value="<?php echo $user->ID;?>" />
<input name="videosID" type="hidden" value="<?php echo $vId; ?>" />
<input name="downloadvids" id="downloadvids" type="submit" value="Download"/>
</form>
还有关于 dl-script.php --
require_once $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php';
global $post;
$userid = $_POST['userID'];
$videosid = $_POST['videosID'];
$nameOld = '/path/to/'.$userid.'/'.$videosid.'/'.$videosid.'.mp4';
$nameNew = "download.mp4";
header('Content-type: video/mp4');
header("Content-disposition: attachment; filename=$nameNew");
header("Content-Length: ".filesize($nameOld));
readfile($nameOld);
exit();
当尝试单击提交时,会开始下载(文件名为 download.mp4),但是当我尝试在 windows 媒体播放器中打开 mp4 时,它会告诉我 -
Windows Media Player cannot play the file. The Player might not support the file type or might not support the codec that was used to compress the file.
我已经检查了文件路径并且能够在我的浏览器中播放视频或右键单击下载没有问题。
因此,使用 php 脚本文件必须以某种方式损坏。我尝试添加/删除header content-* 和file_get_contents,但仍然没有运气。
我做错了什么?
编辑
出于测试目的,我修改了代码以从我的第二个服务器下载到我运行脚本的原始服务器。
$userid = $_POST['userID'];
$videosid = $_POST['videosID'];
$path = 'https://path/to/'.$userid.'/'.$videosid.'/'.$videosid.'.mp4';
$save = '/var/path/to/'.$userid.'/'.$videosid.'/'.$videosid.'.mp4';
file_put_contents($save, fopen($path, 'r'));
$nameNew = "download.mp4";
header('Content-type: video/mp4');
header("Content-disposition: attachment; filename=$nameNew");
header("Content-Length: ".filesize($save));
readfile($save);
然而,这仍然不能正确下载。如果我在没有脚本的情况下直接下载文件,它可以正常工作。
【问题讨论】:
-
仅供参考,如果您提供另一种下载文件的方式,“隐藏路径”将毫无用处。你想要的是
dl-script.php中的某种权限检查,它只允许用户下载一次文件。 -
如果我提供另一种方式,你是什么意思?这是他们应该能够下载的唯一方式。我对右键单击的评论只是我为测试文件所做的事情。用户应该只使用提到的一个下载按钮。 @deceze
-
是的,当然,但这不会“隐藏文件”。这只是获取文件的另一种方式。你能向特定的 URL 发出特定的请求,然后你会得到一个文件吗? → 是 → 没有“隐藏”。
-
是的,但它不会将 url 暴露给不是“技术娴熟”的用户。大多数情况下——如果不是全部的话,我的用户也不会。我现在的问题和第一步是让文件正确下载。对于问题中提到的整个过程,您还有什么建议,并给出答案吗?
-
我会尝试将下载的文件与原始文件进行比较,看看有什么区别。尤其是前几个字节可能不同,如果有的话。
标签: php download http-headers mp4