• ベストアンサー
  • すぐに回答を!

PHPでWAVファイルをDL→保存する

PHPでWAVファイルをダウンロード→保存できるようにしたいと思い 以下のプログラムを組みました。 $fpath = 'wav/music.wav'; // ファイルパス $fname = 'music.wav'; // ファイル名 header('Content-Type: audio/x-wav'); header('Content-Length: '.filesize($fpath)); header('Content-Disposition: attachment; filename="'.$fname.'"'); echo file_get_contents($fpath); ファイルのダウンロード、保存と出来たのですが 実際にファイルを開こうとすると音楽プレーヤーで再生出来ませんでした。 ダウンロードしたファイルと元のファイルのプロパティを見比べた所、 「概要」に表示されていた項目(ビットレート等)が消えていたので 正常に保存が出来ていないようです。ファイルサイズは同じでした。 どうすればWAVファイルが普通に保存できるでしょうか? よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数673
  • ありがとう数1

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

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

$fpathの場所にファイルが存在していなくて、 空のファイルが保存されている可能性はありませんか。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

回答有難う御座います! なんとか自己解決できました! header部分をHTMLタグ内に埋め込んだのが原因でした。 こんな初歩的なミスをしてしまうとは…^^;

関連するQ&A

  • PHP:wavファイルのダウンロード

    音楽ファイルを会員に配信するサイトを運営しています。 mp3は問題なくダウンロード・再生できるのですが、wavファイルはダウンロードしてもファイルが破壊されており、再生できません。 wavファイルのバイト数に変化はありませんでした。FTPからファイルをダウンロードすると正常に再生できるので、問題はウェブでのダウンロードをする過程にあることは分かっています。いろいろ調べているのですがそれ以降の原因が分からず困っています。 誰か原因をご存知の方、目星の付く方などおられましたら、ぜひ解答お願いいたします。 ファイルダウンロードには、以下のようなphp関数を使っています。 function download_file($path_file){ if (!file_exists($path_file)) { die("Error: No Such File."); } if (($content_length = filesize($path_file)) == 0) { die("Error: File size is 0.(".$path_file.")"); } if($_POST['sort'] == mp3){ header("Content-Type: audio/mpeg"); }elseif($_POST['sort'] == wav){ header("Content-Type: audio/x-wav"); } header("Content-Disposition: attachment; filename=\"" .basename($path_file)."\""); header("Content-Length: ".$content_length); header("Content-Transfer-Encoding: binary"); $handle = fopen($path_file, 'rb'); while (!feof($handle)) { echo fread($handle, 4096); ob_flush(); flush(); } fclose($handle); }

    • 締切済み
    • PHP
  • ファイルのダウンロードについて

    いつもお世話になっております。 ファイルのダウンロードについて質問です。    header('Content-Type: image/jpeg'); header('Content-Length: '.filesize($fpath)); header('Content-disposition: attachment; filename="'.$fname.'"'); readfile($fpath); headerを使っています。 ダウンロードしたいファイルは jpg,pdf,xls,xlsx,doc,ppt,などですが それぞれ Content-Type は 拡張子 xlsなら  header('Content-Type: application/vnd.ms-excel'); にと 変更しております。 エクセルを ダウンロードしますと、 「開こうとしているファイルは実際にはその拡張子が示すファイル形式ではありません。 このファイルを開く前にファイルが破損していないこと、信頼できる発行元からの ファイルであることを確認してください。ファイルを今すぐ開きますか?」 とメッセージが出てきて、「はい」とすると 文字化けしたエクセルが開きます。 ワードですと、開いて修復しますかとエラーが出た後 ⇒OK⇒ 正しく開けます。 PDFだと 問題なく開きます。 エクセルとワードは 下記のように書きますと <a href='files/ファイル名' target='_blank'> 正しく開くことができますが、この方法だと ダウンロードするファイル名を 変更できませんので、使うことができません。 上記のエラー解決方法はありますでしょうか。 また header 以外の方法で ファイル名を変更して ダウンロードする方法が ありましたら 教えていただけませんでしょうか。 情報不足でしたらすみません。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPによるファイルのダウンロード

    初めまして最近ちょっとはまってしまっているので分る方がいましたらアドバイスお願いします。 PHPのheader関数を使ってブラウザのダイアログを表示させるファイルのダウンロードを実装した際に、ファイルサイズが大きいものをダウンロードしているとダウンロードが完了するまで他のアクセスが応答しなくなる場合があります。 基本的には $fp = fopen($filePath, "rb"); $contents = fread($fp, filesize($filePath)); fclose($fp); $len = strlen($contents); header("Content-type: application/octet-stream"); header('Content-disposition: inline; filename="' . $filename . '"'); header("Content-length: " . $len); echo $contents; というような一般的な書き方をしています。 ファイルのサイズ的には10MB前後です。 同じような現象を解決された方がいましたらアドバイス頂けると幸いです。

    • 締切済み
    • PHP
  • PHPで複数ファイルのダウンロード

    はじめまして、PHPについて質問させていただきます。 PHPでファイルを複数ダウンロードできるようしたいと思っています。 色々調べ、header関数を使用し、以下のように記述すると ファイルのダウンロードは成功しました。 /*****************************************/ // ダウンロードさせる元ファイル(絶対パス) $filepath = 'test_01.pdf'; // 保存時のファイル名(デフォルト) $filename = 'download001.pdf'; // HTTPヘッダ送信 header("Content-length: " . filesize($filepath)); header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($filepath); /*****************************************/ 一つのファイルのダウンロードに成功したので、 次に複数のファイルを順番にダウンロードをさせる為にループ処理をしました。 /*****************************************/ //配列 複数ファイル $downfile = array("test_01","test_02","test_03"); //データ数 $max = count($downfile); // ダウンロードさせるディレクトリ(絶対パス) $filepath = "/home/sites/www.eshop-himawari.com/web/test_nihon/form_down/file/"; // 保存時のファイル名(デフォルト) $filename = "download"; $filetype = ".pdf"; $kazu = 1; //ループ処理 for( $i = 0; $i < count( $max ); $i++ ){ $downpath = $filepath.$downfile[$i].$filetype; $filename = $filename.$kazu.$filetype; $kazu = $kazu++; // HTTPヘッダ送信 header("Content-length: " . filesize($downpath)); header("Content-type: application/pdf"); header("Content-Disposition: attachment; filename=\"{$filename}\""); // ファイルを読み込んで出力 readfile($downpath); // $fp = fopen( "$downpath", "rb" ); // @fpassthru( $fp ); } /*****************************************/ しかし実行すると最初のファイルはダウンロードしますが 2つ目からのファイルはダウンロードされませんでした。 きちんとループ処理をされて、2つ目以降のファイルをダウンロード するには、どうすればいいのでしょうか?

    • 締切済み
    • PHP
  • csvをダウンロードする際、いきなり「名前を付けて保存」窓を表示したい。

    現在以下のような記述でダウンロードさせています。 header("Content-Disposition: attachment; filename=$Html_flnm"); header("Content-Type: application/csv ;name=.$Html_flnm"); header("Content-Length: ".filesize("$csvpath")); これだと、 「ファイルのダウンロード」窓が開き、「開く」「保存」「キャンセル」の3つの選択が可能です。 ここで「保存」を選ぶと「名前を付けて保存」窓が開きますが、 いきなりこれを開くようにしたいのです。可能でしょうか。 もしくは、「ファイルのダウンロード」窓の選択肢を 「保存」「キャンセル」の2つにする、という方法でも 結構です。

    • 締切済み
    • 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
  • PHPでのファイルのダウンロードについて

    お世話になります。 タイトルのとおりPHPでファイルのダウンロードを行いたいのですが、 ファイルを保存するというダイアログが出てくれません。 tesuto.php <?php $file="/work/tesuto.csv"; header ("Content-Disposition: attachment; filename=$file"); header ("Content-type: application/x-csv"); readfile ($file); ?> tesuto.phpを実行するとダウンロードされずに、ファイルの中身が表示されてしまいます。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPでダウンロードしたファイルが0kbになる

    いつもお世話になります。 表題のとおり、 PHPでサーバー上の画像や動画のファイルをダウンロードしローカルに保存したいのですが、 ダウンロードはできるのですがファイルの中身が空になってしまいます。 特に動画の場合は 「ファイルを再生できません。プレーヤーがそのファイルの種類をサポートしていないか、そのファイルの圧縮に使用したコーデックをサポートしていない可能性があります。」 というメッセージが出ます。 ファイル形式は画像はjpg、動画はwmvで試しました。OSはwindows7です。 ブラウザはクローム、サファリ、IEで試しましたが結果は一緒でした。 プレーヤーは入っていて、ffftpでサーバーのファイルをクリックすると正しく開きます。 以下がソースになります。 <?php // ダウンロードさせる元ファイル $fullpath = 'http://www.ドメイン/パス/logo.jpg'; // 保存時のファイル名(デフォルト) $filename = 'logo.jpg'; // HTTPヘッダ送信 header("Content-type: image/jpeg"); header("Content-Disposition: attachment; filename=$filename"); //ファイルサイズ進捗表示 header('Content-Length: '.filesize('$filename')); // ファイルを読み込んで出力 readfile($fullpath); ?> 以上です。 ダウンロードされるファイル名は正しい(この場合logo.jpg)ものがダウンロードされます。 間違っている箇所、追加or削除したほうがよいコードなどございますでしょうか。 よろしくお願いいたします。

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

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

    • ベストアンサー
    • PHP