例えば、/get_file.php?id=42なんて感じでリクエストが飛んできた場合、サーバはid=42のファイル名を知っているがクライアントは知らないなんてことがある。そんなときはphpで
header('Content-Disposition: inline; filename=hoge.jpg');
header('Content-type: image/jpg; name=hoge.jpg');
ってやってからファイルを送ると吉(参考:RFC2183)。ホントはContent-typeの行でnameパラメータを使うべきではないらしいんだが、ブラウザによっては…なんてことがあったらヤなので念のため。
ちなみに、
header('Content-Disposition: attachment; filename=hoge.jpg');
header('Content-type: image/jpg; name=hoge.jpg');
ってやるとダウンロードダイアログが開くようになる。