2013-02-26 7 views
2

나는 하루 종일 내 머리에 기름을 튀 겼다. 내 눈이 어두워 질 때까지 조사 중 ... 알아 두어야 할 사항 : 사이트 루트 외부에있는 파일에 액세스하려면 어떻게해야합니까?사이트 루트 외부에있는 파일에 어떻게 액세스합니까?

배경 : Linux를 실행하는 Apache 2.0 전용 서버.

코드 : PHP와 MySQL

이유 : 나는 파일을 브라우저로 파일의 경로와 파일 이름을 입력로부터 보호되어야합니다.

이것은 그렇게 어려운 일은 아니지만 ... 내 머리는 다르게 말한다. 어떤 도움이라도 절대적으로 감사 할 것입니다.

+1

귀하의 질문에 약간의 설명이 도움이 될 것입니다. LAMP를 사용하고 있다고하셨습니다. * Apache * 또는 * PHP 코드 *에서이 파일에 액세스하려고합니까? 후자 (가장 가능성이 높습니다)가 사이트 루트 내부의 코드입니까? – pjmorse

+0

다른 PHP 파일 (예 : 응용 프로그램 파일을로드하는 색인 ​​파일)에 액세스하는 PHP 파일 인 경우 상대 경로 또는 절대 경로를 지정하거나 응용 프로그램 폴더를 PHP 경로 환경에 추가 할 수 있습니다. 하지만 다른 것들은 느려질 것입니다. – Jerry

+0

내가 틀릴 수도 있습니다. 그러나 제공되는 링크 중 일부에서 제안 된 별칭을 사용하는 경우 URL을 입력 할 수있는 사람들과 동일한 문제가 발생할 수 있습니다. .htaccess를 사용하면 자신의 페이지에서 이미지를 표시하는 것 이외의 다른 것을 방지하십시오 (다른 방법으로 제공되는 이미지는 403 오류가 발생합니다) - http://corz.org/serv/tricks/htaccess.php; PHP 스크립트를 사용하여 파일을 제공 할 수도 있습니다. PHP는 다운로드 요청 처리 방법을 결정하는 데 사용할 수 있으며, img src는 단순한 플랫 파일이 아닙니다. * .jpg 링크 – ChrisW

답변

4

다소 차이가있는 것처럼 보이는 answers to this question을 살펴보십시오.

간략한 요약 : readfile() 또는 file_get_contents()은 내가 쓴 내용입니다. 이 예는 readfile() 페이지에서 제공 :

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

내가 사용자 입력을 사용하여 $file 변수가 설정 될 수 있도록 권장하지 않습니다! 응답에서 임의로 파일을 반환하기 전에 파일 이름의 출처를 생각하십시오.

+0

나는이 질문을 올린 이래로 오랜 시간이 걸렸으나 위의 코드는 사이트의 루트 폴더 밖에있는 것을 어떻게 알 수 있습니까? 어떻게 작동하는지 더 잘 이해하고 싶습니다. – wordman

+0

루트 URL (예 : 'monkey.gif'대신 '/ home/me/files/monkey.gif')을 입력하십시오. – pjmorse

+0

그리고 그것은 매력처럼 작동했습니다! 이제이를 사이트에 통합하십시오. 이렇게 늦게까지 돌아 가셔서 사과드립니다. 그러나 오늘까지이 프로젝트에서 철수했습니다. – wordman

0

사이트 루트 외부의 파일에 액세스를 시도하고 있습니까? 그러면 link in stackoverflow을 볼 수 있습니다. 그리고 이것은 Apache의 official doc입니다.

그렇지 않으면 다른 사용자가 사이트 루트 외부의 파일에 액세스하지 못하도록 특별한 처리를 수행 할 필요가 없습니다.

+1

사실, 오늘 그 게시물을 여러 번 읽었습니다. 나는 ailiases의 사용을 피할 수있는 또 다른 것을 읽었습니다. 따라서 이것에 대한 나의 총체적인 혼란. 온라인에서 읽고있는 것보다 더 명확한 정보가 필요합니다. 모든 질문은 이미이 일을 수행하는 방법을 알고있는 사람들에게만 의미가있는 방식으로 대답되는 것으로 보이며 앞으로 더 이상 나를 떠날 수 없습니다. – wordman

관련 문제