PHP初学者です、よろしくお願い致します。
PHPでバックアップを取りたく、次の様にしてみたのですが、実行するとファイルは正しいサイズでダウンロードされるのですが解凍すると中身は空になっています。できたファイルをFTPで別途ダウンロードして解凍してみると正常です。
$file = $storedir.$generatefile;
$tstr = 'tar -C '.$upperdir. ' -czf '.$storedir.$generatefile.' '.$targetfolder;
$result = system($tstr, $retval);
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
}
ファイルが出来上がっていないのにダウンロードが始まってしまうからでしょうか?もしそうならファイルが出来上がってからダウンロードが始まるようにするにはどうしたら良いでしょうか?
根本的にやり方が良くないようでしたらそれもご指摘いただければありがたいです。よろしくお願いいたします。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
なぜ
>ob_clean();
>flush();
しているの?
それとreadfileはバイナリセーフではないのでは?
この回答への補足
コメントありがとうございます。
http://php.benscom.com/manual/ja/function.readfi …
からコピーした物で、これが問題を起こしているのでしょうか?
readfile以外に方法がありますでしょうか?(調べてみます。)
Zend FrameWorkでsmartyを使用していたため、ダウンロードされるファイルの頭にページ情報がくっついていました。次の様にして正しいファイルを得られました。お騒がせいたしました。
$file = $storedir.$generatefile;
$tstr = 'tar -C '.$upperdir. ' -czf '.$storedir.$generatefile.' '.$targetfolder;
$result = system($tstr, $retval);
if (file_exists($file)) {
$response = $this->getResponse();
$response->setRawHeader('Content-Description: File Transfer');
$response->setRawHeader('Content-Type: application/octet-stream');
$response->setRawHeader('Content-Disposition: attachment; filename='.basename($file));
$response->setRawHeader('Content-Transfer-Encoding: binary');
$response->setRawHeader('Expires: 0');
$response->setRawHeader('Cache-Control: must-revalidate, post-check=0, pre-check=0');
$response->setRawHeader('Pragma: public');
$response->setRawHeader('Content-Length: ' . filesize($file));
$response->setBody(file_get_contents($file));
$response->sendResponse();
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- HTML・CSS html cssのmargin 5 2022/12/03 11:04
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS htmltとcssのコードで 1 2022/11/26 13:37
- Ruby 教えてください 2 2023/01/04 17:50
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ファイルダウンロードについて
-
PHPのFTP関数ftp_fgetエラーに...
-
phpでzipファイルダウンロード...
-
csvダウンロードについて
-
ブラウザでExcelをダウンロード...
-
CSV出力時の”0”表示(電話番号...
-
ダウンロードファイル名の文字...
-
複数ファイルを連続でダウンロード
-
onedrive にexcelファイルをア...
-
phpでPEAR::DBを使っているので...
-
フォントの色を変えるには?
-
php5-extensions を make でき...
-
PHPのみでの背景色は指定できる...
-
リンク先を隠す方法はないでし...
-
index.phpって何ですか? 具体...
-
トランザクションが原因?DBに...
-
CFileDialogの最初のディレクト...
-
2つの画像ファイルが異なるファ...
-
バッチを用いたフォルダの自動移動
-
パースエラーとは?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPで複数ファイルのダウン...
-
PHPでファイルのダウンロードす...
-
eclipseでコメントアウトができ...
-
Excelファイルをダウンロード
-
csvをダウンロードする際、いき...
-
phpでうまく画像がダウンロード...
-
指定したURLからファイル(PDF...
-
phpでzipファイルダウンロード...
-
VB.NETのFTPダウンロードについて
-
ファイルのダウンロードのイベ...
-
ダウンロードファイル名の文字...
-
zip圧縮の種類について
-
PHPでファイルのダウンロード判...
-
CSVファイルをダウンロードで文...
-
csvダウンロードについて
-
DelphiのURLDownloadToFile関数...
-
【PHP】ダウンロードサイト作成...
-
ブラウザでExcelをダウンロード...
-
ファイルのダウンロードが出来ない
-
ファイル一覧を表示しその画面...
おすすめ情報