2012-06-09 7 views
1

웹 루트 디렉토리 외부에서 파일을 다운로드하고 파일을 나열 할 수있는 스크립트를 만들려고합니다 ... 디렉토리의 파일을 나열하고 있지만 다운로드 할 수 없습니다. 그들이 클릭했을 때 단지 website.com/clickedlink.jpg로 간다. 그러나 내가 원하는 위치로 갈 방법을 바꾸는 것이 필요하다. ...외부 디렉토리 목록 및 다운로드

나는 조금 이상하게 설명하고 있다고 생각한다. 설명이 필요한지 말해주세요.

나는 집/파일/I/필요 /에서 파일을 다운로드해야하지만 웹 사이트는 /의/var/웹 사이트에 저장되어있는 사람이 내가 100 % 감사 할 것 도와 주실 수 그렇다면

!

<html><head><title>Root page</title></head><body> 


<? 
// open this directory 
$myDirectory = opendir("/home/files/I/need"); 

// get each entry 
while($entryName = readdir($myDirectory)) { 
    $dirArray[] = $entryName; 
} 

// close directory 
closedir($myDirectory); 

// count elements in array 
$indexCount = count($dirArray); 
Print ("$indexCount files<br>\n"); 

// sort 'em 
sort($dirArray); 

// print 'em 
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n"); 
print("<TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n"); 
// loop through the array of files and print them all 
for($index=0; $index < $indexCount; $index++) { 
     if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files 
     print("<TR><TD><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>"); 
     print("<td>"); 
     print(filetype($dirArray[$index])); 
     print("</td>"); 
     print("<td>"); 
     print(filesize($dirArray[$index])); 
     print("</td>"); 
     print("</TR>\n"); 
    } 
} 
print("</TABLE>\n"); 
?> 
</body></html> 


</body></html> 
+0

symlink, 폴더/위치 별칭을 만들거나 파일과 함께 절대 경로를 사용할 수 있습니다. – rkosegi

+0

나는 그런 것을 시도했다 ... 그리고 나는 그것을했다고 생각하지만 작동하지 않는다. ... 나는 webroot에서 downloads라는 폴더를 만들고 symlink를 사용하여 다른 폴더에 연결하려고 시도했다. . 그리고 내 FTP 클라이언트에서 웹 루트에서 다운로드 폴더를 클릭하면 다른 폴더로 안내하지만, 다운로드 링크를 클릭하면 오류가 발견되지 않는다고 생각합니다. – Butterflycode

+0

별명을 만들 필요가 있습니다. – rkosegi

답변

1

가장 좋은 해결책은 위치 별칭을 만들어 웹 서버가이를 처리하도록하는 것입니다. 웹 서버에서 다운로드를 수행하는 것은 PHP에서하는 것보다 훨씬 확장 성이 좋습니다.

/path/to/your/script.php/clickedlink.jpg 

/path/to/your/script.php가 있습니다 :

$basePath = "/home/files/I/need"; 
if (isset($_SERVER['PATH_INFO']) && $file = basename($_SERVER['PATH_INFO'])) { 
    if (file_exists("$basePath/$file")) { 
     // add file size 
     header('Content-Length: ' . filesize("$basePath/$file")); 
     // write file to output 
     readfile("$basePath/$file"); 
     return; 
    } 
} 

다운로드를 만들기 위해 URL을 구성하려면 당신이 PHP 솔루션을 요구하기 때문에

그러나, 스크립트의 상단이 추가 페이지를 생성하는 동일한 URL; 원하는 파일 이름과 함께 슬래시를 추가합니다.

저는 basename()을 사용하여 사람들이 ../../../etc/passwd 또는 볼 수 없어야하는 다른 파일에 액세스하지 못하도록하지만, 이는 또한 하위 폴더를 사용할 수 없음을 의미합니다. 하위 폴더를 지원해야하는 경우 PATH_INFO의 다른 방법으로 위생을 처리해야합니다.

+0

내가해야 할 일에 관해서는 조금 혼란 스럽다 ... 나는 그것을 내 스크립트의 맨 위에 추가하고 무엇을 수정 하는가? – Butterflycode

+0

@Butterflycode 기본적으로 게시 한 코드는 다운로드 자체를 처리합니다 ... URL 뒤에/clickedlink.jpg를 추가하면 작동합니다. –

+0

정상적으로 다운로드하는 것과는 다르다는 것, 다운로드가 시작될 때 얼마나 큰지를 말하지 않습니다. 다운로드 될 때까지 계속됩니다 ...이 문제를 해결할 방법이 있습니까? – Butterflycode