2

訪問者がサーバーからファイルをダウンロードできるようにする小さな PHP スクリプトを作成しました。ファイルの 1 つを取得し、ベース名を取得して、ヘッダーとファイルをクライアントに送信します。

ただし、ファイルをダウンロードするときに、index.php を取得することもあれば、proper_file_name.zip を取得することもあります。

なぜ時々うまくいくのか、なぜ時々うまくいかないのか、私にはよくわかりません。アドバイスをいただければ幸いです。

これは私のソースコードの関連部分です:

// Client requested custom byte range
if(isset($_SERVER['HTTP_RANGE'])) 
{ 
  $range = explode('-', substr($_SERVER['HTTP_RANGE'], 6));
  $seekStart = intval($range[0]);

  if ($range[1] > 0)
    $seekEnd = intval($range[1]);

  header('HTTP/1.1 206 Partial Content');
  header(sprintf('Content-Range: bytes %d-%d/%d', $seekStart, $seekEnd, $size_vfile));
}
else // Set headers for full file
  header('HTTP/1.1 200 OK');

// Get basename of filename
$filename = basename($filename);

// Send headers to client
header('Cache-Control: private');
header('Content-Type: application/octet-stream'); 
header("Content-Disposition: attachment; filename=\"$filename\"");
header('Content-Transfer-Encoding: binary');
header('Content-Description: File Transfer');
header('Content-Length: '.$file_size);
header('Accept-Ranges: bytes');
4

2 に答える 2

1

ベース名を使用しているため、作業ディレクトリに依存しています。ファイルをダウンロードする前に、適切なディレクトリに移動するだけです

于 2012-09-03T22:23:07.463 に答える
1

ファイル名をサニタイズしますか?

すべてのブラウザがすべての文字を受け入れるわけではありません。" は 100% 保証されたブレークになりますが、他の文字は問題を引き起こすことに注意してください。おそらく、問題を引き起こしているファイル名を確認することで、問題を引き起こしているものを見つけることができます。

好ましくない可能性のある文字を削除して、$filename をサニタイズすることをお勧めします。これについての読み物は次のとおりです。http://greenbytes.de/tech/tc2231/

str_replace() を使用して、気に入らない文字を変更します。

于 2012-09-04T00:17:22.207 に答える