У меня есть сайт, на котором пользователи должны платить за скачивание видео, которое они создают на сайте. Из-за этого мне нужно скрыть путь к загрузкам.
У меня есть страница 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), но когда я пытаюсь открыть mp4 в Windows Media Player, он говорит мне -
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);
Это, однако, все еще не загружается правильно. Если я загружаю файл напрямую, хотя и без скрипта, он работает нормально.