[PHP-users 18374]ファイルダウンロードで「開く」のみ失敗する
Hiroaki Arakawa
arakawa @ softem.jp
2003年 10月 9日 (木) 14:39:01 JST
はじめまして。荒川と申します。
phpにおけるhttpヘッダを利用したダウンロードに関して
どうしてもうまくいかずこちらに質問させていただいた次第です。
webアプリ上の掲示板においてファイルのアップロード&ダウンロード
を行いたいのですが、ダウンロードの方がうまくいきません。
設計としてはアップロードされたファイルを指定されているフォルダに
一括保存し、掲示板に表示されているリンクをクリックすると
ファイルがダウンロードされるという仕組みです。
アップロードされたファイルはユニークなファイル名に変更した状態
でフォルダに保存され、ダウンロード時に本当のファイル名をDBに問い合わせ
ダウンロードするという手順となっております。
ダウンロードを開始するとファイルを「開く」か「保存する」ダイアログが表示
されますが、その際に「開く」を選択するとそのファイルを開くアプリケーション側
でエラーが起こります。
テキストエディタでは
「ファイルが開けません。ファイル名が正しいか確認してください」
画像をIEで開こうとすると
「'file:///C:/Documents%20and%20Settings/×××.●●●/Local%20Settings/
Temporary%20Internet%20Files/Content.IE5/AD8BMJMN/icon_h_rewriteCol0%5B1%5D.
gif'
が見つかりません。パスまたはインターネット アドレスが正しいかどうかを確認し
てください。」
といったエラ−メッセージが表示されます。
ただし、「開く」「保存する」のダイアログで「保存する」を選択すると素直に
ダウンロードでき正しくファイルを開くことができます。
ファイル名も正しく表示されています。
ソースのダウンロード処理部分を下記に添付します。
どうかよろしくお願いします。
____________________________________________________________________________
________________
環境
サーバー : windows2003 iis 6.0
PHP : 4.3.2
クライアント : windows2003 IE 6.0
____________________________________________________________________________
_________________
function download(){
//リクエストからフォルダ内のファイル名(以下ファイルID)を取得
$fileid = $_REQUEST["fileid"];
//データベースアクセス用のオブジェクト生成
$dao = new messageDAO();
//データベースアクセスオブジェクトにファイルIDを引数とし、
//ファイル名を問い合わせる
$filename = $dao->fileidToFilename($fileid);
//データベースに存在しない場合はfalseが返る
//掲示板の登録確認画面(DB保存前)でもダウンロードの確認ができるため
//セッションを確認する
if(!$filename){
if($_SESSION["message"]){
$filename = $_SESSION["message"]->file_name;
}
else{
trigger_error("ファイルエラー",E_USER_ERROR);
}
}
//ファイルの容量取得
$content_length = filesize("uploadfile/" . $fileid);
//ダウンロード用ヘッダ
Header("Content-disposition: attachment; filename= $filename");
header("Content-Length: ".$content_length);
header("Content-Type: application/octet-stream");
// Header("Content-disposition: inline; filename= test.txt");
// ->デバッグ(失敗)
// Header("Content-disposition: attachment; filename= test.txt");
// ->デバッグ(失敗)
// Header("Content-Type: content=text");
// -> デバッグ(失敗)
//ダウンロードファイルを吐き出す
readfile("uploadfile/" . $fileid);
// readfile("test.txt");
// -> デバッグ(失敗)
exit();
}
お願いします。
------------------------------
荒川 ヒロアキ
PHP-users メーリングリストの案内