0

PHP に次のスクリプトがあり、ディレクトリ パス /Users/abc/bde/fgh からすべてのファイルのリストを作成するとします。同じファイルのダウンロード可能なリンクを作成したいのですが、どうすればそれを達成できますか?

$path = "/Users/abc/bde/fgh"; 

// Open the folder 
$dir_handle = @opendir($path) or die("Unable to open $path"); 

// Loop through the files 
while ($file = readdir($dir_handle)) { 

if($file == "." || $file == ".." || $file == "index.php" ) 
    continue; 
    echo "<a href=\"$file\">$file</a><br />";   
  } 

// Close        
closedir($dir_handle); 

前もって感謝します。

4

1 に答える 1

0

あなたが探しているのは、おそらくあらゆる種類のファイルのダウンロードを強制する方法ですよね?

このコードを見てください。ユーザーにダウンロードさせるファイルの種類に応じて、MIME タイプを追加することができます。

このコードは次からコピーされました: http://davidwalsh.name/php-force-download

// http://davidwalsh.name/php-force-download
// grab the requested file's name
$file_name = $_GET['file'];

// make sure it's a file before doing anything!
if(is_file($file_name)) {

    /*
        Do any processing you'd like here:
        1.  Increment a counter
        2.  Do something with the DB
        3.  Check user permissions
        4.  Anything you want!
    */

    // required for IE
    if(ini_get('zlib.output_compression')) { ini_set('zlib.output_compression', 'Off'); }

    // get the file mime type using the file extension
    switch(strtolower(substr(strrchr($file_name, '.'), 1))) {
        case 'pdf': $mime = 'application/pdf'; break;
        case 'zip': $mime = 'application/zip'; break;
        case 'jpeg':
        case 'jpg': $mime = 'image/jpg'; break;
        default: $mime = 'application/force-download';
    }
    header('Pragma: public');   // required
    header('Expires: 0');       // no cache
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Last-Modified: '.gmdate ('D, d M Y H:i:s', filemtime ($file_name)).' GMT');
    header('Cache-Control: private',false);
    header('Content-Type: '.$mime);
    header('Content-Disposition: attachment; filename="'.basename($file_name).'"');
    header('Content-Transfer-Encoding: binary');
    header('Content-Length: '.filesize($file_name));    // provide file size
    header('Connection: close');
    readfile($file_name);       // push it out
    exit();

}

ダウンロード リンクをクリックすると、新しいページ (または同じもの) を作成し、ファイル名パラメーターが "file={filename}" の新しいページ (または同じページ) に移動するだけです。セキュリティのため、ファイル パスは含めないでください。この方法にはセキュリティ上の問題がありますが、あなたにとっては問題ではないかもしれません.すべてはあなたの状況とダウンロードされているもの、そしてそれが公開データであるかどうかによって異なります.

于 2013-04-22T21:53:58.087 に答える