###前提・実現したいこと
アップロードしたファイルをブラウザからダウンロードする時、「ソース」という単語が含まれるファイル名のファイルだとなぜかファイル名が文字化けし、ファイルが破損しているとエラーが出ます。
ファイルのアップロード時は、「ソース」という単語が含まれるファイル名でも、ファイル名・ファイルサイズともに、正常に保存されます。
しかし、「ソース」が含まれるファイルをダウンロードすると冒頭に記述したエラーになります。
ダウンロードしたファイルサイズもほぼ0サイズです。
「ー」が含まれるファイル名だと正常にダウンロードできないのかと思い、「ー」を含むファイル名をアップロード・ダウンロードしてみましたが、どうやら「ソース」という単語が含まれるファイル名のみ正常にダウンロードできないようです。
また、ファイル名の文字化け部分は「ソース」の単語のみです。
windows環境で行っているので、ファイルのアップロード・ダウンロード時はファイル名をUTF-8からSJISに変換しています。
また、mysql,php、ブラウザのエンコードの環境もUTF-8に揃えています。
「ソース」の単語が含まれていても文字化け・ファイルも破損せず正常にダウンロードできる方法やアドバイスがあればご教授お願いいたします。
###発生している問題・エラーメッセージ
エラーメッセージ
###該当のソースコード
アップロードしたファイルの情報(ファイル名・ファイルパス)はmysqlに突っ込んでいます。
以下はダウンロード時のソースです。
ファイルデータをmysqlから取得してファイル名をSHISに変換してます。
//$beforeNameと$fpathはDBから取得したファイル名とファイルパスを変数に入れてます $fname = mb_convert_encoding($beforeName, "SJIS", "UTF-8"); //SJISに変換したファイル名に置き換え $fpath = str_replace( $beforeName, $fname, $fpath ); header('Content-Type: application/force-download'); header('Content-Length: '.filesize($fpath)); header('Content-disposition: attachment; filename="'.$fname.'"'); readfile($fpath);
###試したこと
以下のファイル名でアップロードしたファイルをダウンロードした時、異常ファイルになった例です。
ファイル名:「ソース.pdf」「おたふくソース.pdf」「ソースの移動.xlsx」
ダウンロード時も正常なファイル名
「アース.pdf」「アースの.pdf」「アースの移動.pdf」「セイバー.pdf」「オリバー222」
###補足情報(言語/FW/ツール等のバージョンなど)
環境:windows(7/8/10),xampp(5.6.12),php(5.6.12),mysql(5.6.26),apache(2.4.16),cakephp(2.5)
ブラウザ:firefox,chrome,IE11
回答5件
あなたの回答
tips
プレビュー