カテゴリ | |
---|---|
サマリ | 添付ファイルが壊れる |
バージョン | 1.4.7 |
投稿者 | sato.is-tech |
状態 | 完了 |
投稿日 | 2010-06-18 (金) 18:01:35 |
EXCELファイルを添付ファイルにアップロードして、ダウンロードするとファイルが壊れてしまいます。 attachフォルダのファイルをFTPでダウンロードして、対象ファイルを開くと大丈夫のようです。
※最初ファイル名も文字化けしてしまっていたので、過去の質問を参照しattach.inc.phpを直すことで 解決することができました。
attach.inc.phpのopen()メソッドのコードは現在以下のような状況となっております。
function open() { $this->getstatus(); $this->status['count'][$this->age]++; $this->putstatus(); $filename = $this->file; echo("filename:{$filename}<br />"); echo("this->size:{$this->size}<br />"); echo("this->type:{$this->type}<br />"); echo("this->filename:{$this->filename}<br />"); if(ereg("MSIE",$_SERVER["HTTP_USER_AGENT"])){ $filename = htmlspecialchars(mb_convert_encoding($this->file,'SJIS','auto')); $filename = htmlspecialchars($filename); }else{ $filename = htmlspecialchars(mb_convert_encoding($this->file,'UTF-8','auto')); $filename = htmlspecialchars($filename); } ini_set('default_charset',''); mb_http_output('pass'); header('Content-Disposition: inline; filename="' . $filename . '"'); header('Content-Length: ' . $this->size); header('Content-Type: ' . $this->type); flush(); @readfile($this->filename); exit; }
を参考にしましたが、解決することができません。お手数ですがご教授ください。
クライアント環境: OS:windows Xp SP3 ブラウザ:google Chrome 5.0.375.70
サーバ環境: レンタルサーバ:sixcore S1 OS:Linux PHP Version 5.1.6
mbstringの設定 Multibyte Support enabled Multibyte string engine libmbfl Multibyte (japanese) regex support enabled Multibyte regex (oniguruma) version 3.7.1
Local & Master Value mbstring.detect_order auto mbstring.encoding_translation Off mbstring.func_overload 0 mbstring.http_input auto mbstring.http_output SJIS mbstring.internal_encoding EUC-JP mbstring.language Japanese mbstring.strict_detection Off mbstring.substitute_character no value
filename:ファイル名<br />this->size:ファイルサイズ<br />this->type:ファイルタイプ<br />this->filename:PukiWikiが保管している時のファイル名<br />が最初に混ざっていませんか?バイナリファイルが壊れる原因の1つに、「不必要なデータが入る(混ざる)」というのがあります。 -- 2010-06-18 (金) 18:27:51
Before if (LANG == 'ja') { switch(UA_NAME . '/' . UA_PROFILE){ case 'Opera/default': $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); break; case 'MSIE/default': $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); break; } }
After if (LANG == 'ja') { switch(UA_NAME . '/' . UA_PROFILE){ case 'Opera/default': $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); break; case 'MSIE/default': $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); break; case 'Mozilla/default': if(eregi('Chrome', getenv( "HTTP_USER_AGENT" ))){ $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); } else{ $filename = mb_convert_encoding($filename, 'EUC', 'auto'); } break; case 'Firefox/default': $filename = mb_convert_encoding($filename, 'EUC', 'auto'); break; default: $filename = mb_convert_encoding($filename, 'SJIS', 'auto'); break; } }