• ベストアンサー

IEだと・・・だめなんです

Zipファイルに固めてダウンロードさせようとしているのですが、Firefoxだとダウンロードできて、IEだとエラーが出てこけてしまいます。 まず、Header部分が原因だと思うのですが、原因分かる方いらっしゃいますか?教えてください。 header("Content-type: application/octet-stream"); header('Content-Disposition: attachment; filename="' . zip_file_name . '"'); header("Content-length: " . filesize($zip_file_name)); readfile($zip_file_name);

  • PHP
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

header('Content-Disposition: attachment; filename="' . zip_file_name . '"'); の zip_file_name → $zap_file_name では? それと、現在の環境次第ですが、念のために readfile();する前に、PHPがバイナリデータを誤認識してコードの自動変換をしないように mb_http_output("pass") ; を入れておいたほうがいいですよ。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

ファイル名の問題もあるかも、ちゃんと英数半角で出力しています? またreadfileはバイナリセーフではないので、きちんとした ファイルI/O手順で処理した方がよいかもしれません

関連するQ&A

  • fileのダウンロードとページ移動を続けて行うには?

    初心者です。教えて頂けますか? フォームのボタンを押したらダウンロードする様に作りました。 ボタンを押したらダウンロードとページ移動を続けて行うには どの様にすれば良いでしょうか? header( "Content-Type: application/octet-stream" ); header( "Content-Disposition: attachment; filename=$contentFilePath" ); header( 'Content-Length: '.filesize($contentFilePath) ); readfile($contentFilePath);

    • ベストアンサー
    • PHP
  • PHPでのファイルダウンロードについて

    初めて質問させていただきます。 社内用でファイルのアップロード・ダウンロードができるシステムを開発しています。 PCからは問題なくアップロードもダウンロードも行えていたのですが、 スマホからアクセスしてダウンロードをすると失敗してしまいます。 下記のコードを使ってます。 ファイルの種類はいろいろなので、「application/octet-stream」にしてます。 が、それぞれのファイルタイプに合わせて変更させても状況は変わりませんでした。 -- header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$file_name.'"'); header('Content-Length: '.filesize($dl_file)); readfile($dl_file); exit; -- なにか解決策があるようでしたら、教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ダウンロードさせると*.phpにリネームされてしまう。

    phpでファイルのダウンローダを作成したのですが、IEで動かすと*.phpと動作しているphpのスクリプトネームにリネームされてしまいます。 FireFoxではリネームされる事無くダウンロードされるのですが、IEでの解決方法をご存知の方、どうぞご教授くださいませ。 コードは $filesize=filesize($filedldir); header ("Accept-Ranges: none"); header ("Content-Length: $filesize"); header ("Content-Type: application/octet-stream"); header ("Content-Disposition: attachment; filename=$fnames"); readfile ($filedldir); exit; といった感じです。 何がおかしいのでしょうか?

    • ベストアンサー
    • PHP
  • 動画をダウンロードするとサイズ0で終了する

    動画をダウンロードするとサイズ0となってしまいます。   動画:AVI、サイズ:122MB プログラムは <?php $file = "".$_GET["id"].".avi"; $file_length = filesize($file); header("Content-Disposition: attachment; filename=$file"); header("Content-Length: $file_length"); header("Content-Type: application/octet-stream"); readfile ($file); ?> で、ファイル名は正常に受け渡されています。 また、サイズも表示させたとこころ正常値でした。 ちなみに、サイズ19MBのAVIで試したところ、正常にダウンロード できました。 サイズの問題だと思うのですが、対応方法をお教え下さい。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 圧縮ファイルのダウンロード

    現在ログをダウンロードするプログラムを作成しています。 ログを1つのファイルとしてあつかうため、 それぞれのログを ftp_fget関数で1つのファイルにまとめました。 ここまではうまくいってるのですが、容量が大きいため 圧縮せざるをえないと重い。 system('/usr/local/bin/zip '.$fileName.'.zip '.$fileName); 上記のシステムコマンドでファイルを圧縮しました。 15MBのファイルが2MBまで落ちましたが、 これをダウンロードしようとするとうまくいきません。 ダウンロードのやり方は下記のようなやり方です。 header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=" . $all_data['fileName']); header("Content-Length: " . $fSize['B']); readfile($all_data['fileName']); このような方法でダウンロードしようとすると、何故か688バイト分くらいしかとってきてくれません。 何か原因があるのでしょうか? どなたかご教授お願いいたします。

    • ベストアンサー
    • PHP
  • ダウンロードが機能しない。

    html,php共に初心者です。教えて頂けますか? ダウンロードボタンを押すと、以下のphpファイルを開きダウンロードを行う様にしたのですが、mac safari ではダウンロード出来たのですが、 windows IE では ダウンロード出来ませんでした。 ファイルの構成は以下です。 /www/category/contentsList.php <-ダウンロードボタンがあります /www/category/downloader.php <-ダウンロードボタンを押すと呼ばれます。 /contentDirectory/ダウンロードするファイル.zip downloader.phpの記述は以下のみです。 <?php $serverDirectory = dirname($_SERVER['DOCUMENT_ROOT']); $contentDirectory = $_POST['contentDirectory']; $fileName = $_POST['fileName']; $filePath = $serverDirectory.'/'.$contentDirectory.'/'.$fileName; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="'.$fileName.'"'); header('Content-Length: '.filesize($filePath)); readfile($filePath); ?> どうすれば良いでしょうか? 大変申し訳ありません。よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでファイルをダウンロードさせるコード

    PDFファイルをその場では開かせず、ダウンロードさせるコードを作成しています header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename="' . basename($path_file) . '"'); header('Content-Length:' . $content_length); ファイルをダウンロードさせること自体は成功しており、ファイル容量も間違ってないのですが ダウンロード後に開こうとするとファイルが破損していて開くことができません。 また、ハイパーリンクから直接開かせた場合は問題なく表示できております。 原因の分かる方がいらっしゃいましたらアドバイスお願い致します。

    • ベストアンサー
    • PHP
  • PHPでファイルのダウンロードすると開けません。

    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を使用しています。

    • ベストアンサー
    • PHP
  • 複数ファイルのダウンロード

    PHPで複数のログファイルをダウンロードしたいときはどのようにしたらよいのでしょうか? ログファイルは下記のような形式です。 test_20041001,test_20041002,・・・,test_2004_1031 以前までは、DBから取得したデータをタブ区切りで表示したものを .xlsファイルでダウンロードしていました。 そのときのやり方としては、 //---------------------------------- //ファイルダウンロード //---------------------------------- $fSize = $Sec->getFileSize(ADMIN_RESERVECSV_PATH); header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=" . PATH); header("Content-Length: " . $fSize['B']); readfile(PATH); というような方法です。

    • 締切済み
    • PHP
  • PHPでバックアップ

    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); } ファイルが出来上がっていないのにダウンロードが始まってしまうからでしょうか?もしそうならファイルが出来上がってからダウンロードが始まるようにするにはどうしたら良いでしょうか? 根本的にやり方が良くないようでしたらそれもご指摘いただければありがたいです。よろしくお願いいたします。

    • 締切済み
    • PHP

専門家に質問してみよう