[PHP-users 18382]Re: ファイルダウンロードで「開く」のみ失敗する

kato kato @ itsherpa.com
2003年 10月 9日 (木) 21:10:20 JST


はじめまして
かとうと申します。

プログラムの中に$_SESSIONという文字がありましたので、セッション内での処
理ですよね。

おそらくキャッシュの問題ではないでしょうか?
セッション内ということでキャッシュにファイルが残らないようになっており開
こうとしたときにそのファイルがないということでエラーが出ていると思います。

session_cache_limiterにprivateなどを設定してみてはいかがでしょうか。

> 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 メーリングリストの案内