サイトからサーバーにファイルをアップロードすると、正常に動作します。ただし、それらをダウンロードしようとすると、ファイルが毎回破損しています。サーバーでファイルマネージャーを開くと、これを介してファイルをダウンロードでき、正常に動作します。ファイルが正常にアップロードされていることはわかっていますが、ダウンロード プロセスでエラーが発生したようです。
ファイルは、テーブル内の ID とそれに続く拡張子で名前が付けられた私のサーバーに保存されます。名前はデータベースから取得され、ダウンロード時に使用されます。
id | userid | filename | extension | size
1 2 test.jpeg jpeg 123456
//the extension column is just for testing, yes I know it's redundant
test.jpeg は 1.jpeg としてサーバーに保存されます。
//this is the very first bit of code on the page aside from starting the session
if(isset($_POST['downloadFile'])){
$file = new fileprocessing;
$fileID = mysql_real_escape_string($_POST['hiddenFileDownload']);
$file->serveFile($fileID);
}
これは、ファイルを見つけてユーザーがダウンロードできるようにする serveFile 関数です。
function serveFile($fileID){
$sql = mysql_query("select * from files where id = '$fileID'");
$file = mysql_fetch_array($sql);
$ext = $file['extension'];
header('Content-type: image/x-generic'); //I'm trying jpegs only right now
header('Content-Disposition: attachment; filename="'.$file['filename'].".".$ext.'" ');
readfile('/home/.../public_html/user_files/'. $fileID.".".$ext.' ');
}
ファイルがダウンロードされると、正しい名前が付けられます。これがどこで間違っているのかわかりません。ファイルを正しく開いていませんか?
編集 - servefile 関数で拡張子を調整しました