私は、ユーザーがログインした後にのみ利用できる安全な領域を持つ Web サイトでいくつかの作業を行っています。この領域には、ダウンロードできる PDF ドキュメントへのリンクを含むページがあります。物理的なドキュメントは、Web サイトのルート ディレクトリの外にあります。PDF ドキュメントへのリンクは次のようになります。
index.php?page=secure-area/download&file=protected.pdf
以下を実行します (注: これは、ブラウザ内でファイルを開くのではなく、ダウンロードを強制する方法であることはわかっています)。
// check security, get filename from request, prefix document download directory and check for file existance then...
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-Transfer-Encoding: binary');
header('Content-Length: ' . filesize($file));
header('Connection: Close');
set_time_limit(0);
readfile($file);
これはうまく機能しますが、Firefox 3 と Internet Explorer 7 (他のブラウザーではテストしていません) では、このファイルをブラウザー内で開くことはできず、両方ともダウンロード ダイアログ ボックスが表示されます (予想どおり)。[保存] ではなく [開く] を選択すると、ドキュメントがダウンロードされ、ブラウザーの外部で Adobe Reader が起動され、ドキュメントがレンダリングされます。
私が抱えている問題は、ブラウザ内でファイルをダウンロードし、保存すると正しいデフォルトのファイル名を持つことです。
ドキュメントをブラウザで開きたい。これを行う 1 つの方法は、ヘッダー「Content-Disposition: inline;」を使用することです。しかし、これはファイル名を指定できないことを意味します (ブラウザによって無視されるように見えるため)。それを行う際の問題は、ドキュメントを保存するときです。デフォルトの名前は、pdf ドキュメントのファイル名ではなく、URL の名前です。
http___example.com_index.php_page=secure_area_download&file=protected.pdf
Firefox と Internet Explorer でドキュメントをブラウザ内で開き、保存する正しいデフォルト ファイル名を指定するにはどうすればよいですか?