16

私は自分の仕事からいくつかのプロジェクトを保存するURLを持っています。それらはほとんどMDBファイルですが、いくつかのJPGとPDFもそこにあります。

私がする必要があるのは、そのディレクトリからすべてのファイルをリストし(すでに実行済み)、ユーザーにそれをダウンロードするオプションを与えることです。

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

4

4 に答える 4

41

ディレクトリの内容を読み取るには、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_exists($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);
}
于 2012-08-23T14:42:08.693 に答える
2

フォルダーがブラウザーからアクセスできる場合 (Web サーバーのドキュメント ルートの外部ではありません)、それらのファイルの場所へのリンクを出力するだけで済みます。それらがドキュメント ルートの外にある場合は、その場所からのファイルの取得と応答へのストリーミングを処理する PHP スクリプトを指すリンク、ボタンなどが必要になります。

于 2012-08-23T14:41:25.440 に答える