2012-08-23 14 views
10

私は自分の作品からいくつかのプロジェクトを保存するURLを持っています。ほとんどの場合、MDBファイルですが、JPGとPDFもあります。サーバからファイルをダウンロードする

私が行う必要があるのは、そのディレクトリのすべてのファイルを一覧表示して(すでに完了している)、ユーザーにダウンロードするオプションを与えることです。

これはどのようにPHPを使用して達成されますか?

+1

で今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

フォルダがブラウザからアクセスできる場合(Webサーバーのドキュメントルートの外側ではない場合)、それらのファイルの場所へのリンクを出力するだけで済みます。それらがドキュメントルートの外にある場合は、リンクやボタンなどが必要です。その場所からファイルを取得し、レスポンスにストリーミングする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()関数リスト指定されたパス内のすべてのファイルとディレクトリ。これは、ブラウザによって処理されないdownload.php

<?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'; 
    } 
} 
関連する問題