Я хочу добавить функцию «Загрузить этот файл» под каждым видео на одном из моих сайтов. Мне нужно заставить пользователя загружать файл, а не просто ссылаться на него, так как это иногда начинает воспроизводить файл в браузере. Проблема в том, что видеофайлы хранятся на отдельном сервере.
В любом случае, я могу заставить загрузить PHP?
Вы можете попробовать что-то вроде этого:
$file_name = 'file.avi'; $file_url = 'http://www.myremoteserver.com/' . $file_name; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"".$file_name."\""); readfile($file_url); exit;
Я просто проверил его, и он работает для меня.
Обратите внимание, что для readfile
для чтения удаленного URL- fopen_wrappers
вам необходимо включить fopen_wrappers
.
Протестированный файл download.php
function _Download($f_location, $f_name){ $file = uniqid() . '.pdf'; file_put_contents($file,file_get_contents($f_location)); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Length: ' . filesize($file)); header('Content-Disposition: attachment; filename=' . basename($f_name)); readfile($file); } _Download($_GET['file'], "file.pdf");
и ссылка для загрузки
<a href="download.php?file=http://url/file.pdf"> Descargar </a>
Попробуй это:
<?php $FileName = '/var/ww/file.txt'; header('Content-disposition: attachment; filename="'.$FileName.'"'); readfile($FileName);
Ключ – это header()
. Вам необходимо отправить заголовок вместе с загрузкой, и он заставит диалог «Сохранить файл» в браузере пользователя.
<?php $FileName = '/var/ww/file.txt'; header('Content-disposition: attachment; filename="'.$FileName.'"'); readfile($FileName);
используя этот код. можно сохранить имя файла так, как вы хотите. например, у вас есть url: http://remoteserver.com/file.mp3 вместо «file.mp3» вы можете использовать этот скрипт для загрузки файла как «newname.mp3»,
<?php $file_name = 'video.flv'; $file_url = 'http://www.myserver.com/secretfilename.flv'; header('Content-Type: application/octet-stream'); header("Content-Transfer-Encoding: Binary"); header("Content-disposition: attachment; filename=\"".$file_name."\""); echo file_get_contents($file_url); die; ?>