На самом деле я не собираюсь задавать этот вопрос, поэтому он, вероятно, повторится. Давайте посмотрим: я бы хотел отключить загрузку файла из моей сети без сценария загрузки (просто используя URL: http://something/file.zip), если вы не зарегистрированы, а PHP предпочтительно. Да, это очень распространенная тема, но я не нашел никакой информации! Многие страницы делают это, например uploaded.net. Надеюсь, вы понимаете, о чем я говорю. Благодаря!Как отключить загрузку файла из Интернета без переменной сеанса?
ответ
Прежде всего, не разрешает прямой доступ к файлу. Сохраните его за пределами корневой папки вашего веб-приложения в другом месте в файловой системе, чтобы не было ссылки, которую можно использовать для ее загрузки. Это связано с тем, что прямой доступ пропускает любое приложение PHP и взаимодействует только с веб-сервером, который не знает значений сеанса вашего приложения.
Затем создайте сценарий загрузки для загрузки файла пользователям. Как правило, такой сценарий будет дан некоторый идентификатор файла, что-то вроде:
http://yourserver.com/download.php?file=file.zip
(Важно:Будьте очень осторожны как определить, что файл Не просто слепо позволяют пользователям загружать то, что они. хотят, или они могут ввести более длинные пути на URL и скачать любой файл с сервера. Всегда проверяйте доступ к вещам первой.)
Это было бы так же, как и любой другой PHP ЮКЖД ipt, за исключением того, что вместо отображения HTML он вернет файл. Фактическая часть вывода файла может быть столь же просто, как:
readfile('/path/to/file.zip');
Вы бы также, вероятно, хотите установить заголовки содержимого соответствующим образом, и т.д. Более полный пример можно найти in the documentation:
<?php
$file = 'monkey.gif';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;
}
?>
Спасибо вам большое! Вместо того, чтобы поместить файл из корневого каталога, я использовал функцию «Hotlink Protection» в CPanel. Но остальное было очень полезно для меня, спасибо :) –
заключит ваш скрипт загрузки с инструкцией 'if'. а также вы можете добавить свой сценарий загрузки? – roullie
Проблема в том, что у меня нет скрипта загрузки xD. Файл загружается при вводе URL-адреса (например: http: //something/file.zip) –
Не разрешать прямой доступ к файлу. Закрепите его за скриптом и проверьте его состояние (условия) внутри этого скрипта. – David