Вопрос говорит все это.. Как я позволяю пользователям загрузить файл с моего веб-сайта и не позволить им видеть то, что связывается, тот файл прибывает из? Я понимаю, что могла бы быть потребность в чем-то как download.php, который будет служить шлюзом, но мимо той фазы, я не знаю, что написать сценарий затем... Если это беспокоит Вас для написания целого кода, несколько имен функций, которые я должен должен быть использовать, были бы действительно удобны!
Найдите способ идентифицировать файл для загрузки (например, переменную GET, которая соответствует идентификатору строки в базе данных, или что-то в этом роде). Черт возьми, убедитесь, что он действительный, потому что вы не хотите, чтобы ваши пользователи могли скачивать что-либо с вашего сайта. Затем используйте заголовок
с 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;
?>
Вы не можете заставить кого-то загрузить файл с URL-адреса, не сообщив ему URL-адрес. Это невозможно в соответствии со спецификацией HTTP. Все загруженное имеет URL-адрес.
Однако вы можете иметь URL-адрес загрузки, который работает только один раз или требует передачи определенной информации с помощью метода POST. Вы проверяете токен в переменных GET или POST и аннулируете этот токен после того, как он используется один раз.
Вы можете использовать функцию header ()
, которая задокументирована здесь
. Я бы посоветовал прокрутить вниз и посмотреть на 1-й пример. Кажется, он делает именно то, что вы хотите.
файл чтения должен делать то, что вы хотите. Поместите фактический файл за пределы корня веб-сервера и потребуйте некоторые учетные данные перед передачей файла обратно.