2012-04-16 3 views
0

私は電子メールメッセージと複数の添付ファイルパスを保存するシンプルなHTMLフォームを持っています。私は、ファイルをサーバー上に保存しており、データベースのファイルへのパスを保存しています。パスからデータベースからファイルを取得する

今どのように私はダウンロードをクリックしたとき、私は、ファイルを取得するための次のコードを使用していますが、これは

$query = " 
    SELECT `type`, `name`, `size`, `file1`,`file2`,`file3`,`file4`,`file5` 
    FROM `upload` WHERE `id` = {$id}"; 
    $result = $dbLink->query($query); 

    if($result) { 
     if($result->num_rows == 1) { 
      $row = mysqli_fetch_assoc($result); 
      header("Content-Type: ". $row['type']); 
      header("Content-Length: ". $row['size']); 
      header("Content-Disposition: attachment; filename=". $row['name']); 

      $path = $row['file1']; 
      $dir = opendir($path); 
      echo $dir; 
      while ($dir && ($file = readdir($dir)) !== false) { 
      echo $file; 
       } 

が動作していない、ユーザーにそれらを表示し、そのパスからファイルをretrive、とすることができますエコーされたファイルにはデータが含まれていません。

これは、「file1」にあるパスが1つのファイルに対してのみ実行されています。同様に私は5つの添付ファイルのパスを持っており、私はすべてこのコードでそれらを取得する必要があります。 どうすればいいですか?

答えて

0

最初に、このようなダウンロードを複数回行うことはできません。そのヘッダーは一度だけ送信できます。それだけです。

$ pathはファイルの絶対パスですか?あなたはテストで最初にチェックするためにis_readable($ file)を試すことができます。一度あなたは完全なパスを持っていれば、それは簡単です。

header("Content-Type: application/octet-stream"); 
header("Content-Length: ". $row['size']); 
header("Content-Disposition: attachment; filename=". $row['name']); 
readfile($row['file1']); 
exit(); 

Readfile出力を直接、それをストリーミングので、あなたはそれをコンテンツを読み、出力する必要はありません。その後に他の出力getが追加されていないことを確認するためにexitを追加するか、ファイルを破損させる可能性があります。

これは、$ row ['file1']に正しいパスがあると仮定して動作します。

複数のファイルの場合、複数の呼び出しが必要です。ユーザーが複数のリンクをクリックすると、ダウンロードのためにクリックすることができます。

唯一の選択肢は、たとえばzipを使用してまとめて1つの大きなzipファイルとして送信することです。

関連する問題