Подтвердить что ты не робот

Разрешить скриптам читать файл, но не позволять пользователям напрямую просматривать файл

Скажем, у меня есть текстовый файл example.txt, и у меня есть PHP скрипт на моем веб-сервере readfile.php.

То, что я хочу сделать, - это запретить пользователям вводить текст http://www.example.com/example.txt и напрямую смотреть на текстовый файл, но я все же хочу, чтобы люди могли загружать http://www.example.com/readfile.php, который читает из файла example.txt и делает что-то с ним (возможно, отображает содержимое файла).

Кроме того, если это можно сделать, что это лучший способ сделать это?

4b9b3361

Ответ 1

Да, это легко сделать.

Существует два основных способа запретить пользователям доступ к example.txt. Первый заключается в том, чтобы поместить его в папку вне вашей веб-папки (обычно называемую www или public_html), вторая - разместить файл .htaccess в папке с вашим example.txt script, который блокирует доступ к файл вообще. .htaccess будет выглядеть как

<files "example.txt"> 
deny from all 
</files>

Но вы можете изменить example.txt на нечто вроде *.txt, если вы хотите заблокировать все файлы .txt в папке.

Затем вы можете использовать file_get_contents() в своем readfile.php, чтобы получить содержимое текстового файла, или если вы просто хотите вывести файл, который вы можете использовать readfile

Ответ 2

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

/home
   example.txt
   /www
      readfile.php

Если /home/www/ является вашей общедоступной папкой webroot, любой файл над ней недоступен через веб-сервер. readfile.php может все равно получить доступ к файлу в ../example.txt.

Ответ 3

Если вам нужно сохранить файлы в веб-роуте, поместите файлы в папку и запретите доступ к этой папке. Если вы используете apache, создайте файл .htaccess в папке и введите deny from all

Ответ 4

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

Я сделал это:

Я помещаю файлы в путь к каталогу, который выходит за рамки того, что может видеть веб-сервер (Apache, для меня). Поэтому нет возможных URL-адресов, которые приведут к тому, что файл будет передан непосредственно веб-сервером. Затем я создал script, который позволяет пользователям войти в систему, щелкнуть по нужному файлу, а затем PHP скрипт считывает файл, помещает соответствующие заголовки, а затем передает файл на компьютер пользователя.

Конечно, script, который показывает пользователю список файлов и script, который передает файл пользователю, должен иметь как минимум доступ для чтения к файлам на пути, где они хранятся.

Удачи!

Ответ 5

Вы можете поместить файл "example.txt" за пределы общей папки и прочитать из readfile.php, например $content = file_get_contents("../example.txt");

Ответ 6

Вы можете вызвать файл, подобный этому, и люди не видят имя файла:

<?php
$file = 'example.txt';

if (file_exists($file)) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Content-Transfer-Encoding: binary');
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
}
?>

(источник: php.net)

Будет ли это работать для вас?