-1

サイトからいくつかのファイルをダウンロードしようとしていますが、引き続き問題が発生します。最初は空のファイルをダウンロードしていましたが、それはコンテンツタイプが原因だと思いました。SOの誰かが私が現在行っているアプリケーション/オクテットストリームを提案しました。その後、実際にファイルを見つける際に多くの問題が発生しました。いくつかのテストケースの後、それは空白の問題でした。それを修正し(「」を入れて)、空のファイルを再度ダウンロードします。

初歩的なコードですが、誰かが助けてくれることを願っています:

<?php
$filename = $_GET['filename'];
$dir = "training/trainingDocuments/";
$downloadFilename = $dir.$filename;
//ftp://site.com///training/trainingDocuments/8%20-%20SUBSEA%20QUESTIONS__51f034ab37a8e.xls
//$downloadFilename = preg_replace('/\s/', '%', $downloadFilename);

//8 - SUBSEA QUESTIONS__51f034ab37a8e.xls
//if the filename exists
if(is_file($downloadFilename)){

//send the headers
header('Pragma: public'); //FIX IE6 Content-Disposition
header('Content-DEscription: File Transfer');
header('Content-Transder-Encoding: binary');
header(sprintf('Content-Length: %u', filesize($downloadFilename)));
header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename=".$downloadFilename."");

}else{
//file doesn't exist
echo "File no exist\n\n";
echo $downloadFilename;
}//end if file exists
4

2 に答える 2

2

実際にファイルを出力することはありません。たとえば、行方不明です

readfile($downloadFilename);

また、あなたのコードでは、悪意のあるユーザーがパスを知っているサーバー上の任意のファイルをダウンロードできることに注意してください。検討

$_GET['file'] = '../../../../../../../../../etc/passwd';
于 2013-07-25T15:07:21.420 に答える