
PHPでファイルのダウンロードすると開けません。
文書を整理するために、アップロードして、必要に応じてダウンロードする仕組みを作っています。
PDFや画像のファイルは問題ないのですが、、
word文書(エクセルもダメでした)を、以下のファイルを作って、ダウンロードし開こうとすると
「ファイル******.docxは無いように問題があるため、開けませんでした。」となります。
※エクセルでは、「Exelで****.xlsxを開くことが出来ません。ファイル形式またはファイルか拡張子が正しくありません。ファイル拡張子とファイル形式が一致していることを確認してください」
とダイアログが出てきます。
$file="アップロードしてある実ファイル名";
$file_name="ローカルに保存する際のファイル名";
※ファイル名を変更しなくても同じなので、そこは関係ないと思います。
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$file_name");
header('Content-Length: '.filesize('$file'));
readfile($file);
リンクを張って開くのには何の問題もありません。
<a href="http://www.******.com/images/$file">$file_name</a>
ダウンロードする際に名前を変更したいので、ダウンロード用のファイルを作ってダウンロードさせようとしています。
何か、ダウンロードをする前に処理が必要なのでしょうか?
よろしくご教授お願いいたします。
※ワード、エクセルは2010を使用しています。
No.1ベストアンサー
- 回答日時:
>header('Content-Length: '.filesize('$file'));
これってシングルクォーテーションで変数囲むと展開されないので
ファイルサイズが0になりませんか?
filesize($file)ないしfilesize("$file")
ダウンロードされたファイルサイズと本来のファイルサイズを比べてみてください
またその他、ファイル名を英数のみにしてみるとか
readfileのように中途半端な関数を利用せずにきちんとファイルI/Oしてやる
などで改善する可能性はあります
ありがとうございました。
>header('Content-Length: '.filesize('$file'));
は、header("Content-Length: ".filesize($file));に変更いたしました。
それから、ファイルのサイズを見ると「0」ではないのですが、
少し違っていました。
(86,993 バイト)正しいファイル
(87,655 バイト)ダウンロードファイル
>readfileのように中途半端な関数を利用せずにきちんとファイルI/Oしてやる
これが、どのようにしたら良いか判らず調べていたら
出力用バッファをクリアするとうまく行くとありましたので試してみた所、改善いたしました!
以下の様に書き換えをいたしました。
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$file_name");
header("Content-Length:".filesize($file));
ob_end_clean();
readfile($file);
これで、思った通りの事が実現できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Visual Basic(VBA) Excelのマクロについて教えてください。 作業フォルダ内に2つのファイルがあります。 このファイル 2 2023/07/09 13:40
- PHP $filePath = './user_img/' . $file['name'];? 1 2022/12/10 07:29
- Excel(エクセル) ドキュメントに保存していたエクセルのファイルが開きません。 2 2022/12/02 09:38
- ドライブ・ストレージ ディスクがいっぱいですと表示される 4 2022/06/12 18:38
- その他(コンピューター・テクノロジー) <a href="file:///フォルダ名/ファイル名">リンクテキスト</a>について 1 2023/04/06 22:40
- Visual Basic(VBA) vbaの構文の修正相談(xmlファイルを順に開いてコピペ作業) 1 2023/04/22 01:18
- その他(プログラミング・Web制作) セレクトボックスで選択された値をコントローラーで使用したい 2 2022/07/26 16:41
- iOS ファイルの名前変更 2 2022/08/11 20:47
- HTML・CSS エクセルのファイルのダウンロード 前にアップしたファイルがダウンロードされる 1 2022/11/13 13:02
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PHPでファイルをダウンロードさ...
-
csvをダウンロードする際、いき...
-
VB.NETのFTPダウンロードについて
-
ダウンロードファイル名の文字...
-
PHPでファイルのダウンロードす...
-
PHPのif文でその処理を途中で抜...
-
【file_exists】ファイルが存在...
-
「クラス関数」「メンバ関数」...
-
glob関数で日本語文字が取得で...
-
VB6.0とBASP21を用いてyahooメ...
-
URLの変わらないページをPHPで...
-
FTPClientで転送結果(OKかFAIL)
-
PHPの設定で、 エラーが発生し...
-
VB6にてメールを送信する方法
-
別ファイルの変数を呼び出した...
-
WinXP PHP5 Apache2 初期設定で...
-
DLL のロードの順序
-
LoadLibraryの戻り値(HMODULE)...
-
ボタンのクリック数を合計保存...
-
別サーバのプログラムを起動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ftp_getでローカルにファイルが...
-
zip圧縮の種類について
-
PHPでファイルのダウンロードす...
-
libxml2のインストール
-
PHPで複数ファイルのダウン...
-
生成したHTMLをボタンクリック...
-
ファイルのダウンロードのイベ...
-
VB.NETのFTPダウンロードについて
-
phpでzipファイルダウンロード...
-
PHPでダウンロードしたファイル...
-
複数ファイルを連続でダウンロード
-
eclipseでコメントアウトができ...
-
Excelファイルをダウンロード
-
ファイルに書き込む時の負荷に...
-
CSVファイルのダウンロード
-
ファイル一覧を表示しその画面...
-
ファイルアップロード・ダウン...
-
phpでEXCELファイルの編集
-
PDF ダウンロード
-
ダウンロードファイル名の文字...
おすすめ情報