ユーザーが自分の画像などをダウンロードできる簡単なダウンロードスクリプトを作成しています。
しかし、私は奇妙な問題を抱えています。
ファイルをダウンロードすると、ダウンロードしたファイルタイプに関係なく、index.php ファイルの内容が含まれています。私のコードは次のようになります。
$fullPath = $r['snptFilepath'] . $r['snptFilename'];
if (file_exists($fullPath)) {
#echo $fullPath;
// setting headers
header('Content-Description: File Transfer');
header('Cache-Control: public'); # needed for IE
header('Content-Type: '.$r['snptFiletype'].'');
header('Content-Disposition: attachment; filename='. $filename . '.' . $r['snptExtension']);
header('Content-Length: '.$r['snptSize'].'');
readfile($fullPath)or die('error!');
} else {
die('File does not exist');
}
$r は、ファイルがアップロードされたときにサイズ、タイプ、パスなどを保存したデータベースからの結果です。
アップデート
*.pdf ファイルをアップロードおよびダウンロードすると、正常に動作します。しかし、*.zip と text/rtf, text/plain をダウンロードしようとすると、動作がおかしくなります。
奇妙なことに、ダウンロードしたファイルの内容を含む完全な index.php ファイルをダウンロードします。
答え
これをhttp://php.net/manual/en/function.readfile.phpからコピーしましたが、現在は機能しています。次のようです:ob_clean(); トリックをしました!みんな助けてくれてありがとう。
#setting headers
header('Content-Description: File Transfer');
header('Content-Type: '.$type);
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($file);
exit;