2012-08-08 6 views
1

다운로드 버튼을 만들어 사용자가 버튼 하나만 클릭하여 pdf 파일을 다운로드 할 수있게하려고합니다. 나는이있다 :파일 이름이 잘못되었지만 정확합니다.

<?php 

session_start(); // Alltid överst på sidan 

if(!isset($_SESSION['sess_id']) OR $_SESSION['sess_id'] < 1){ 
    die("Skapa ett konto som investerare för att enkelt få tillgång till affärsplaner!"); 
}else if(is_numeric($_SESSION['sess_id'])) { 

    /* kolla om användaren försöker ange filer i en annan mapp */ 
    if(substr_count($_GET['file'], "/") > 0){ 
     die("Invalid path"); } 


/* skapa fullständig sökväg till filen */ 
$file = '/server/php/files/' . $_GET['file']; 

/* kolla om filen finns */ 
if(!file_exists($file)) 
{ 
    die("Invalid filename"); 
} 

을하고 나에게 "Invalidfile 이름"메시지를주고 ..

그러나, 내가 echo $file; 및 브라우저의 경로를 복사 (+ 앞에 로컬 호스트)는 그 나야를 제공하는 경우 내가 찾고있는 대화를 다운로드하십시오. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

출력

/server/php/files/roibay-business-plan.pdf 

와 "server"echo $file 내 루트 폴더에 폴더입니다.

+5

을 그냥 참고를 필터링하지 않고 같은 $ _GET을 사용하면 보안 문제가 발생할 수있다. http://en.wikipedia.org/wiki/Null_character –

+0

필자가 작성한 코드가 있습니다. :) (필자가 추가 할 수 있도록 추가 하겠지만) 감사합니다! – Alisso

+0

출력을'echo $ file' 명령에 게시 할 수 있습니까? –

답변

2

내가 설정 MAMP와 로컬 호스트 내가 lab.local 그래서 파일 경로 I 인 별칭을 만들었습니다 내가 얘기하는 것은 : lab.local/server/php/files/somefile.pdf이고, 웹 브라우저에 웹 브라우저에 입력하면 대화가 팝업되지만 le_exists가 유효성을 검사하지 않습니다. 경로

즉, server 디렉토리가 루트가 아닙니다. 이 시도 :

file_exists($_SERVER{'DOCUMENT_ROOT'} . "/server/php/files/roibay-business-plan.pdf"))

+0

행복으로 튀는 !!! 그것은 작동합니다! 그리고 나는 뭔가를 배웠다! :)))) 끝내 줘! – Alisso

+0

나는 서버 위의 폴더가 서버 루트 일 수 있다고 생각했다. :) – Alisso

+0

그것은 이상하지만. 당신은'server' 디렉토리가'root' 디렉토리에 있다고 말했습니다. 귀하의 루트 디렉토리가 귀하의 웹 사이트 루트 폴더라는 것을 의미합니까? –

2

내가 $ file을 echo하는 경우; 경로를 내 브라우저에 복사하면 내가 찾고있는 다운로드 대화 상자가 나옵니다.

file_exists은 서버와 관련된 경로 이름을 필요로하기 때문입니다. URI가 아닙니다.

예 :

file_exists('/var/www/site.com/index.htm'); // this would work. 
file_exists('www.site.com/index.htm'); // this would not 
+0

을 시도하지만 경로는 relative :/server입니다. /php/files/somefile.pdf – Alisso

+1

/server/php이란 무엇입니까? PHP 루트가 무엇인지에 따라 다릅니다. 내 서버 설정에'/ index.htm'을 포함 시키려고한다면'/ var/www/mysite.com'에서 index.htm을 찾지 않을 것입니다. 그러나'index.htm' (선행 슬래시 없음)을 포함 시키려고하면 다른 지점에서 보일 것입니다. – wanovak

+0

@Alisso 당신은 친척을 계속 말하고 있습니다. 파일 시스템의 경로가'/ server/php/files/bla.pdf' 또는'/ var/www/html/server/php/files/blad.pdf'라는 것을 의미합니까? –

관련 문제