В настоящее время я использую этот код, чтобы скрыть ссылку для скачивания, но это дает незавершенную загрузку для некоторых пользователей. Я не знаю, почему, но слишком много пользователей сообщают мне эту проблему. Мой текущий код:
file = "../".$realFileName; $fakeFileName= 'Upbaz.ir-'.base64_decode($_GET['ffname']); $fp = fopen($file, 'rb'); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$fakeFileName"); header("Content-Length: " . filesize($file)); fpassthru($fp);
Кто-нибудь знает, как скрыть ссылку на скачивание?
Этот скрипт будет обрабатывать загрузку файла и включает в себя буфер / разные типы ext (если хотите). Хороший способ скрыть ссылки – это поместить файлы в защищенный каталог и иметь ссылки, хранящиеся в базе данных. Пользователь видит ID или сеанс, привязанный к файлу, и сервер находит файл и обслуживает его.
if ($fd = fopen ($fullPath, "r")) { $fsize = filesize($fullPath); $path_parts = pathinfo($fullPath); $ext = strtolower($path_parts["extension"]); switch ($ext) { case "txt": header("Content-type: application/txt"); // add here more headers for diff. extensions header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); // use 'attachment' to force a download break; default: header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"".$path_parts["basename"]."\""); } header("Content-length: $fsize"); header("Cache-control: private"); //use this to open files directly while(!feof($fd)) { $buffer = fread($fd, 2048); echo $buffer; } } fclose ($fd);
.htaccess для защиты каталога (у вас должен быть каталог только для этих файлов
deny from all
Над сценарием изменено к вашему:
$file = "../".$realFileName; $fakeFileName= 'Upbaz.ir-'.base64_decode($_GET['ffname']); if ($fd = fopen ($file, "r")) { $fsize = filesize($file); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=\"$fakename\""); header("Content-length: $fsize"); header("Cache-control: private"); //use this to open files directly while(!feof($fd)) { $buffer = fread($fd, 2048); echo $buffer; } } fclose ($fd);
Увеличьте время выполнения скрипта
@set_time_limit(120);