2010-04-05 6 views
1

일반적으로 내 웹 사이트의 루트에있는 내 친구 또는 가족 용 문서 (이미지, mpeg, Excel, 워드 문서 등)를/파일/또는 비슷한 것. 너무 드물다.PHP가 포함 된 사이트 루트가 아닌 서버 파일 액세스/다운로드

하지만 사용자 세션 컨트롤을 사용하여 사용자가 파일을 전용/파일/디렉토리에 업로드 할 수있게했습니다. (파일 이름은 해당 사용자 ID로 db에 저장 됨)

그러나 다른 사람이 다른 사람의 파일을 추측하고 찾을 수 있음을 의미합니다.
업로드 할 때 파일 이름을 무작위로 지정합니다. 그리고 아파치가/files/디렉토리 내용을 표시하는 것을 멈 춥니 다.

그러나 웹 사이트의 루트 외부에서 파일을 저장하고 싶습니다. 이렇게하면 브라우저를 통해 액세스 할 수 없습니다.

표시 할 코드가 없지만 수행 할 수없는 경우이 작업을 시작하지 않으려했습니다. 나는 당신의 웹 사이트 루트 외부에서 이미지를 표시하는 방법을 보여줍니다이 조각 발견했다 :

어쩌면 내가 어떤 파일 형식이 사용할 수 있습니다,하지만 누군가가 사용자를 허용하는 더 좋은 방법이 들어있다 (로그인) 온라인에서 자신의 파일에 액세스 할 수 있지만 다른 사용자가 비슷한 액세스 권한을 갖도록 허용하지 않습니까?

<?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('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; 
} 
?> 

이 내용 - 처리 및 내용 - 형식 헤더를 설정하여 다운로드 할 수있는 모든 파일을 강제로 :

답변

1

PHP 매뉴얼은 readfile function's page에 대한 예제와이를 달성하는 방법에 대한 좋은 통찰력을 제공합니다. 이런 종류의 일이 보통 행해지는 방식과 비슷합니다. file_get_contents도 똑같은 일을 할 수 있습니다.

관련 문제