2012-08-23 2 views
10

내 작품의 일부 프로젝트를 저장하는 URL이 있는데, 주로 MDB 파일이지만 일부 JPG와 PDF도 있습니다.서버에서 파일 다운로드

내가해야할 일은 해당 디렉토리의 모든 파일을 나열하고 (이미 완료 한) 사용자에게 다운로드 옵션을 제공하는 것입니다.

어떻게 PHP를 사용하여 달성 할 수 있습니까?

+1

이 브라우저에 의해 처리되지 않는 download.php에서 PHP 5 지금

PHP 7. 모두 작동? – SomeKittens

+1

하지만 브라우저에서 다운로드를 시작하려면 어떻게해야합니까? –

+0

파일에 대한 링크를 제공 하시겠습니까? – Nick

답변

24

디렉토리 내용을 읽으려면 당신은 readdir()를 사용하고 다운로드 데이터를 전송하는 브라우저를 강제 할 수 download.php에서 파일

if ($handle = opendir('/path/to/your/dir/')) { 
    while (false !== ($entry = readdir($handle))) { 
     if ($entry != "." && $entry != "..") { 
      echo "<a href='download.php?file=".$entry."'>".$entry."</a>\n"; 
     } 
    } 
    closedir($handle); 
} 

를 다운로드, 내 예를 download.php에서, 스크립트를 사용하고 있는지 클라이언트를 만들기 위해 basename()을 사용할 수 있습니다 여기 ../config.php

$file = basename($_GET['file']); 
$file = '/path/to/your/dir/'.$file; 

if(!$file){ // file does not exist 
    die('file not found'); 
} else { 
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 
    header("Content-Disposition: attachment; filename=$file"); 
    header("Content-Type: application/zip"); 
    header("Content-Transfer-Encoding: binary"); 

    // read the file from disk 
    readfile($file); 
} 
+0

403 메시지가 표시됩니다. 폴더 권한을 확인하고 777로 설정되어 있으므로 무슨 일이 일어나는지 전혀 모른다. –

+0

경로가 올바른지 확인하십시오 ... 폴더 및 파일 경로 –

+0

파일이있는 디렉토리에서 .htaccess 파일의 내용을 확인하십시오. –

2

폴더가 웹 서버의 문서 루트 외부가 아닌 브라우저에서 액세스 할 수 있으면 해당 파일의 위치에 대한 링크 만 출력하면됩니다. 그들이 문서 루트 외부에 있다면, 링크, 버튼 등이 있어야하며, 그 위치에서 파일을 받고 응답으로 스트리밍하는 PHP 스크립트를 가리킨다.

+0

파일이 이미지 또는 텍스트이면 다운로드하지 않습니다. –

+0

브라우저에서 열리는 파일 인 경우 브라우저의 저장 기능을 사용하여 파일 시스템에 저장할 수 있습니다. 임무는 여전히 성취된다. –

+0

고객에게 그 사실을 알 수 있다면 대부분의 '소비자'는 브라우저 나 pdf 파일에서 텍스트 파일을 열면 어떻게해야할지 모르겠다는 것을 알게되었습니다. –

0

같은 다른 파일 이름을 전달하지 않는 것은 디렉토리에있는 모든 파일을 나열하고 다운로드하는 간단한 솔루션입니다. 당신의 index.php 파일

<?php 
$dir = "./"; 

$allFiles = scandir($dir); 
$files = array_diff($allFiles, array('.', '..')); // To remove . and .. 

foreach($files as $file){ 
    echo "<a href='download.php?file=".$file."'>".$file."</a><br>"; 
} 

위해 scandir() 함수 목록에 지정된 경로 내의 모든 파일과 디렉토리에

. 그것은

<?php 
$filename = basename($_GET['file']); 
// Specify file path. 
$path = ''; // '/uplods/' 
$download_file = $path.$filename; 

if(!empty($filename)){ 
    // Check file is exists on given path. 
    if(file_exists($download_file)) 
    { 
     header('Content-Disposition: attachment; filename=' . $filename); 
     readfile($download_file); 
     exit; 
    } 
    else 
    { 
     echo 'File does not exists on given path'; 
    } 
} 
관련 문제