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で複数ファイルのダウン...
-
PHPでダウンロードしたファイル...
-
検索結果をCSVにダウンロードす...
-
VB.NETのFTPダウンロードについて
-
ファイルのダウンロードのイベ...
-
TCPDFについて
-
PHPのif文でその処理を途中で抜...
-
onedrive にexcelファイルをア...
-
CFileDialogの最初のディレクト...
-
URLが.PHPってどういう...
-
php 完了画面の送信メールのコ...
-
ワードプレスサイト PHP8.0.25...
-
Content-Typeが機能していない?
-
別ファイルの変数を呼び出した...
-
phpでget_headers()が使えない?
-
「クラス関数」「メンバ関数」...
-
PHP8を使うと、大量のWarningが...
-
phpのftp_get()でエラーが出ます。
-
.phpファイルが、表示されない
-
form actionで二つ送信先を指定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
phpでうまく画像がダウンロード...
-
ブラウザでExcelをダウンロード...
-
zip圧縮の種類について
-
PHPでファイルのダウンロードす...
-
VB.NETのFTPダウンロードについて
-
生成したHTMLをボタンクリック...
-
eclipseでコメントアウトができ...
-
【PHP】ダウンロードサイト作成...
-
複数ファイルを連続でダウンロード
-
ダウンロードファイル名の文字...
-
phpでzipファイルダウンロード...
-
PHPのFTP関数ftp_fgetエラーに...
-
libxml2のインストール
-
PHPでダウンロードしたファイル...
-
ファイルダウンロードについて
-
PHPでネット上のPDFファイルを保存
-
PHPでgz形式のファイルをダウン...
-
phpでの帯域制御、ダウンロード...
-
csvダウンロードについて
おすすめ情報