PHP-скрипт, позволяющий пользователям загружать файл с моего сайта, не раскрывая фактическую ссылку на файл на моем сайте? - PullRequest
8 голосов
/ 15 июля 2010

Вопрос говорит сам за себя. Как я могу позволить пользователям загружать файл с моего сайта, а не , чтобы они могли видеть, по какой ссылке этот файл? Я понимаю, что может потребоваться что-то вроде download.php , который будет служить в качестве шлюза, но после этого этапа, я не знаю, что писать дальше ... Если вам мешает написать весь код несколько имен функций, которые мне нужно использовать, были бы очень полезны!

Ответы [ 4 ]

10 голосов
/ 15 июля 2010

Найдите способ определения файла для загрузки (например, переменная GET, которая соответствует идентификатору строки в базе данных или что-то в этом роде). Убедитесь, что это действительно так, потому что вы не хотите, чтобы ваши пользователи могли скачивать что-либо с вашего сайта. Затем используйте header с Content-Disposition, чтобы сообщить браузеру, что файл должен быть загружен, и readfile, чтобы вывести его.

Например:

<?php

$id = intval($_GET['id']);
$query = mysql_query('SELECT file_path FROM files WHERE id = ' . $id);
if (($row = mysql_fetch_row($query)) !== false)
{
    header('Content-Disposition: attachment; filename=' . basename($row[0]));
    readfile($row[0]);
}
exit;

?>
4 голосов
/ 15 июля 2010

Нельзя заставить кого-либо загружать файл с URL-адреса, не сообщив ему об этом. Это невозможно по спецификации HTTP. Все загруженное имеет URL.

Однако вы можете иметь URL-адрес для загрузки, который работает только один раз или требует передачи определенной информации с помощью метода POST. Вы проверяете токен в переменных GET или POST и аннулируете этот токен, если он используется один раз.

1 голос
/ 15 июля 2010

Вы можете использовать функцию header(), которая задокументирована здесь

Я бы предложил прокрутить вниз и посмотреть на 1-й пример.Кажется, он делает именно то, что вы хотите.

0 голосов
/ 15 июля 2010

readfile должен делать то, что вы хотите.Поместите реальный файл за пределы корневого каталога веб-сервера и потребуйте некоторые учетные данные, прежде чем передавать его обратно.

...