4

問題: ダウンロード後、ファイルにデータが含まれていません。つまり、空白になります。

だから、これのために私を助けてください。

<?php

    session_start();
    include_once 'oesdb.php';
    $id=$_REQUEST['id'];

    if(isset($_REQUEST['id']))
    {
      $sql=executeQuery("SELECT * FROM file where id=$id");
      $rows = mysql_fetch_array($sql);
      $file =$rows['file'];


          header('Content-Description: File Transfer');
          header('Content-Type: application/vnd.ms-excel');
          header('Content-Disposition: attachment; filename='.basename($file));
          header('Content-Transfer-Encoding: binary');
          header('Expires: 0');
          header('Cache-Control: must-revalidate');
          header('Pragma: public');
          header('Content-Length: ' . filesize($file));
          ob_clean();
          flush();
          readfile('uploads/'.$file);
          exit;

     }
?>
4

3 に答える 3

2

アップロードフォルダにHTACCESSファイルを作成してみませんか?

    Allow From 127.0.0.1
    Deny From All

次に、URLを作成し、HTML5の新しいダウンロード機能を使用して、次のようにします。

    <a href="uploads/filenamehere.txt" download="filenamehere.txt">click to download</a>

PHPを使用してダウンロードスクリプトを作成する時間を節約できます。

于 2013-02-16T19:36:00.163 に答える
0

問題はここにあります:

header('Content-Length: ' . filesize($file));

Content-Lengthあなたが彼に言ったように、ゼロの値を受け取り、ブラウザは長さゼロのファイルをダウンロードします。$fileが に対する相対パスである場合はupload/、次のようにする必要があります。

header('Content-Length: ' . filesize('upload/'.$file));

filezise()正しいサイズが返され、readfile()実際に出力されることを確認してください。

しかし、他の問題は、UPLOADフォルダーと使用について言及したことですuploads。それらは同じではなく、大文字と小文字が重要です。また、相対パスを'uploads/'.$file使用することはお勧めできません。絶対パスを使用することをお勧めします。たとえば、'/var/www/upload/'.$file.

于 2013-02-16T19:53:51.357 に答える
0

これを置き換えてみてください:

$file =$rows['file'];

これで:

$file = "uploads/".$rows['file'];

この:

readfile('uploads/'.$file);

これで

readfile($file);

readfileそれでも機能しない場合は、関数によって返された値を入力します

重要

SQLインジェクションの問題を考慮してください(Ondřej Mirtesのコメントを参照)

于 2013-02-16T18:40:36.290 に答える