2013-02-11 3 views
1

У меня есть еще один вопрос:читаемый файл только PHP

, когда я пишу localhost/folder/file.txt в браузер, он открывает и показать содержание file.txt.

Но я хочу сделать этот файл доступным для чтения только PHP, а не браузером.

Я пробовал все с chmod, но он не работает. Можно ли это сделать?

Благодаря

+1

Самый надежный способ заключается в том, чтобы положить его вне корня сети. –

ответ

3

Вы можете отказаться от доступа к расширению .txt.

.htaccess

# prevent viewing of a specific file 
<Files file.txt> 
order allow,deny 
deny from all 
</Files> 

# multiple file types 
<FilesMatch ".(htaccess|htpasswd|ini|phps|fla|psd|log|sh|txt)$"> 
Order Allow,Deny 
Deny from all 
</FilesMatch> 
+1

Поместить его за пределы веб-корня все еще более солидно, - 'AllowOverride' в конфигурации сервера может измениться и отобразить эту ошибку –

+0

Это неверно, некоторые провайдеры не предоставляют вам доступ ... –

+0

Я говорю, если' AllowOverride' изменяет конфигурацию центрального сервера, это оставляет файл незащищенным. Это не должно произойти, но это может произойти. (Не мой нисходящий канал, хотя иногда это единственный способ) –

0

Вы можете поместить текстовый файл в базу данных MYSQL как BLOB или TEXT. Таким образом, чтение браузером становится невозможным только по запросу (через php).

+1

Это очень оригинальное предложение, но есть, возможно, более простые способы. :) –

+0

И лучшие способы, с вашей целью, вы не хотите этого делать. – jeroenvisser101

5

Пишите в файл за пределами веб-корнем, а затем веб-сервер не будет доступен для клиентов. (Нет требования, чтобы файл находился под корнем документа для PHP, чтобы прочитать его).

Других вариантов включают в себя:

  • Использования систем аутентификации/AuthZ вашего веба-сервер, чтобы защитить файл (не рекомендуется для этой проблемы, поскольку это более вероятно, что ошибка конфигурации нарушит безопасность то, что файл будут размещены в неправильном месте)
  • Использование базы данных вместо
0

Простейшее решение:

$s=file_get_contents('test.txt'); 

Если файл имеет некоторый код для выполнения, вы можете eval это.

eval(file_get_contents('test.txt')); 
-3

Вы пробовали chmod до 660?

Я просто попробовал это с помощью своего веб-сервера, он недоступен.

+0

Поскольку PHP-скрипт обычно работает как тот же пользователь, что и веб-сервер, если вы устанавливаете разрешения, чтобы сервер не мог его прочитать, тогда скрипт PHP также не сможет его прочитать. – Quentin

+1

A «Вы пробовали ...?» - ответ, не объясняя, почему это сработает, может нанести больше вреда, чем пользы.Если у вас есть предложение, пожалуйста, возражайте, почему он будет работать, а не оставлять читателей в замешательстве (в данном случае он не будет работать, как объясняет @Quentin). – Rein

Смежные вопросы