2011-08-08 4 views
13

일반 텍스트 파일 example.txt이 있고 웹 서버에 PHP 스크립트가 있습니다. readfile.php.스크립트가 파일을 읽을 수는 있지만 사용자가 직접 파일을 볼 수 없도록합니다.

내가 할 수 있기를 원하는 것은 http://www.example.com/example.txt를 입력하고 직접 텍스트 파일을보고하지 못하도록하는 것입니다하지만, 난 여전히 가능성 (사람들이 파일 example.txt에서 읽고 그것으로 무언가를 http://www.example.com/readfile.php를로드 할 수 있도록하려면 파일 내용 표시).

또한이를 수행 할 수 있다면 가장 좋은 방법은 무엇일까요?

+0

http://httpd.apache.org/docs/current/mod/mod_rewrite.html –

+0

"사용자가 http://www.example.com/readfile.php를로드 할 수있게하려면 ..." "readfile.txt"가 아닙니다. –

답변

14

예, 쉽게 할 수 있습니다.

사용자가 example.txt에 액세스하는 것을 차단하는 주요 방법은 두 가지가 있습니다. 첫 번째 방법은 웹 폴더 (일반적으로 www 또는 public_html)의 외부 폴더에 넣는 것입니다. 두 번째 방법은 example.txt 스크립트가있는 폴더에 .htaccess 파일을 넣어 파일에 대한 액세스를 차단하는 것입니다. .htaccess

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

과 같을 것이다 그러나 당신이 폴더에있는 모든 .txt 파일을 차단하기를 원한다면 당신은 *.txt처럼 뭔가 example.txt을 변경할 수 있습니다.

그런 다음 텍스트 파일의 내용을 얻을 수 있도록 readfile.phpfile_get_contents()를 사용하거나 그냥 출력하려는 ​​경우 파일은 내가 파일을 매우 민감 포함 비슷한 짓을했는지 readfile

+0

+1 파일을 웹 디렉토리에 넣고 .htaccess를 사용합니다. 감사. – mtahmed

+0

@mtahmed 환영합니다. 수락 해 주셔서 감사합니다! – Paulpro

+0

.htaccess 파일을 추가했지만 file_get_contents()를 호출 할 때 오류가 발생합니다 :: 스트림을 열지 못했습니다 : HTTP 요청이 실패했습니다! HTTP/1.1 403 금지됨. 파일에 액세스 할 수있는 PHP 사용 권한을 변경해야합니까? 나도 행운과 함께 cUrl을 사용해 보았습니다. –

8

공개적으로 액세스 할 수 없도록하려는 파일을 웹 루트 외부에 저장하십시오.

/home 
    example.txt 
    /www 
     readfile.php 

/home/www/이 공개 웹 루트 폴더 인 경우 위의 파일은 웹 서버를 통해 액세스 할 수 없습니다. readfile.php은 여전히 ​​../example.txt에 파일을 완벽하게 액세스 할 수 있습니다.

+0

와우 ... 왜 내가 이것을 생각하지 않았 니? 감사! – mtahmed

0

공용 폴더의 파일 "example.txt"외부 넣고 그런 다음, 웹 루트에있는 파일을 저장하는 폴더에 파일을 넣어해야하는 경우 $content = file_get_contents("../example.txt");

1

처럼 readfile.php에서 읽을 수 있습니다 해당 폴더에 대한 액세스를 거부합니다. 당신이 아파치를 사용하는 경우, 당신은이 같은 파일을 호출 할 수 있습니다 deny from all

0

폴더 및 유형에 htaccess로 파일을 만들어 사람들은 파일 이름이 표시되지 않습니다 :

<?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)

그게 좋겠습니까?

1

사용할 수 있습니다 정보와 나는 단지 검증 된 사용자가 HTTPS 연결을 통해 파일을 검색 할 수 있기를 원합니다.

나는 웹 서버 (나를 위해 아파치는) 볼 수있는 범위 밖에있는 디렉토리 경로에 파일을 넣어 : 내가 무슨 짓을

이이었다. 따라서 웹 서버에서 직접 파일을 제공 할 수있는 URL이 없습니다.그런 다음 사용자가 로그인하고 원하는 파일을 클릭 한 다음 PHP 스크립트가 파일을 읽고 적절한 헤더를 넣은 다음 사용자 컴퓨터에 파일을 스트리밍 할 수있는 스크립트를 만들었습니다.

물론 사용자에게 파일 목록을 보여주는 스크립트와 파일을 사용자에게 스트리밍하는 스크립트는 적어도 저장중인 경로의 파일에 대한 읽기 권한이 있어야합니다.

행운을 빌어 요 !!

관련 문제