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ランキング
-
ExcelとPHPについて・・・
-
CSVファイルのダウンロード
-
ファイルがダウンロードされる...
-
DelphiのURLDownloadToFile関数...
-
csvファイルの取り込み
-
phpでzipファイルダウンロード...
-
zip圧縮の種類について
-
PHPのFTP関数ftp_fgetエラーに...
-
ファイル一覧を表示しその画面...
-
サーバー上のファイルをブラウ...
-
PHPでCSVファイルの任意の行だ...
-
VB.NETのFTPダウンロードについて
-
指定したURLからファイル(PDF...
-
PHPでファイルのダウンロードす...
-
ファイル(PDF・エクセル・ワー...
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPで新しいウインドウで開く命...
-
別ファイルの変数を呼び出した...
-
バッチを用いたフォルダの自動移動
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
ファイル一覧を表示しその画面...
-
zip圧縮の種類について
-
eclipseでコメントアウトができ...
-
ブラウザでExcelをダウンロード...
-
複数ファイルを連続でダウンロード
-
phpでzipファイルダウンロード...
-
libxml2のインストール
-
PHPでファイルのダウンロードす...
-
CSV出力時の”0”表示(電話番号...
-
PHPでダウンロードしたファイル...
-
phpでうまく画像がダウンロード...
-
wgetの使い方
-
Excelファイルをダウンロード
-
サーバー上のファイルをブラウ...
-
日本語ファイル名のアップロー...
-
ファイルのダウンロードのイベ...
-
ダウンロードファイル名の文字...
-
ファイルへの直接アクセスをで...
-
動画をダウンロードするとサイ...
おすすめ情報