1

これは私には奇妙なことのように思えます。動的にアップロードされるファイルのディレクトリがあり、ユーザーがそのファイルを開く前にまずアクセス許可を確認する必要があるため、次のようにしてディレクトリにhtaccessを追加しました。

RewriteEngine On
RewriteRule ^(.*)$ ../../get_file.php [QSA]

次に、phpでパーミッションをチェックインし、ユーザーにパーミッションがある場合は、次のようにファイルをユーザーに提供しようとしています。

//serve file back to user
$full_file_name = 'uploads/conversation_attachments/'.$file_name;
$filesize = filesize($full_file_name);
header("Content-length: ".$filesize);
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=".$full_file_name.";");
readfile($full_file_name);

'a'ファイルを吐き出しますが、'the'ファイルは吐き出しません。したがって、$ file_name = "rYMmfk3j9BSrjaRC.pdf"でファイル"rYMmfk3j9BSrjaRC.pdf"を取得する代わりに、"uploads_conversation_attachments_rYMmfk3j9BSrjaRC.pdf"というファイルを取得しています。どういうわけか、スラッシュをアンダースコアに置き換えているようです。

なぜこれが起こっているのか誰かが何か考えを持っていますか?助けていただければ幸いです!

4

1 に答える 1

3
header("Content-Disposition: attachment; filename={$file_name};");
                                                  ^^^^^^^^^^^^

サーバー側のパスデータをクライアントに出力しないでください。これは役に立たない情報です。サーバー側のパスがクライアントに存在する可能性は非常に低く、ブラウザはそれを尊重しません。そうしないと、悪意のあるサーバーがクライアントマシン上の任意のファイルに落書きしようとする可能性があります。

于 2012-07-17T14:38:26.713 に答える