ファイルダウンロード方法をPHPで実現するには?

このQ&Aのポイント
  • Webサーバーの公開フォルダにあるファイルをPHPでローカルに保存する方法を教えてください。
  • ダウンロード時にダイアログを表示せずにファイルを指定のフォルダに保存する方法を教えてください。
  • wgetコマンドのようにファイルをダウンロードするためのPHPの方法を教えてください。
回答を見る
  • ベストアンサー

ファイルダウンロード

Webサーバーの公開フォルダにあるファイルを、ローカルに保存したいのですが、Linuxのように wget http://xxx.xxxx.xxx/zzzz/ddd.zipする方法をPHPで考えてます。 例 $get1 = "http//xxx.xxxx.xxx/zzz/ddd.zip"; $get2 = "ddd.zip"; header("Content-Type: application/zip"); header("Content-disposition: attachment; filename=$get2"); $fp = fopen($get1, 'rb'); ダウンロードする際にダイアログが開かないで、ローカルの指定のフォルダに保存をおこなうようにしたいです。よろしくお願いします。

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

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

補足ありがとうございます。 >サーバー機のApache公開フォルダ(ブラウザでアクセスするとindexが見える >状態)へ、クライアント内で直接PHPスクリプトを実行させ、サーバーから >ファイルGETをしてくるイメージです。なのでサーバー側にはPHPスクリプト >はありません。 であれば、クライアントPCで実行するphpスクリプトは、 ・file_get_contentsでサーバからファイルを読み込む   (Apacheが返す内容しか取得できない) ・取得した内容を直接ローカルのファイルに書き出す という手順になるのではありませんか?

AuthDB
質問者

お礼

shimixさん、忙しいところ回答ありがとうございます fputs($file_dir.$file_name, file_get_contents($http_url)); で直接ローカルの指定場所にファイル保存できました。 このたびはご教示していただきありがとうございました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

phpスクリプトを置いているサーバとは別のサーバのファイルですよね?で、phpを置いているサーバでなく、phpにアクセスしたクライアントのローカルに保存という手順でよろしいですか? もしそうであれば、自動的に指定のフォルダに保存は出来ません。そんなことが出来たらセキュリティホールになってしまいますから。 #そもそもクライアントPCのOSもわからないし・・

AuthDB
質問者

補足

shimixさんお忙しい所、投稿ありがとうございます。 >phpスクリプトを置いているサーバとは別のサーバのファイルですよね? はい、その通りです。 えーと、もう少し加筆しますね サーバー機のApache公開フォルダ(ブラウザでアクセスするとindexが見える状態)へ、クライアント内で直接PHPスクリプトを実行させ、サーバーからファイルGETをしてくるイメージです。なのでサーバー側にはPHPスクリプトはありません。 動作環境ですが、クライアントはWindows上でxamp環境下でPHPを動作させてます。表現が正しいかわかりませんが、FTPサーバー(ここで言うApache公開フォルダ)にアクセスしファイルGETするような動作(ユーザー認証なし)をPHPスクリプト行う・・・もっとわかりにくくなってきたのでunset(汗);

関連するQ&A

  • csvファイルのダウンロード

    phpでサーバーにあるCSVファイルをダウンロードさせる処理で、ファイルをダウンロードするとHTML部分のソースがファイルに書きこまれてしまっています。調べてみたのですが、解決出来ませんでした。お願いします まずサーバーにあるCSVファイルにsqLの結果を書き込み、その後 header ("Content-Disposition: attachment; filename=ファイル名"); header ("Content-type: application/x-csv"); readfile (ファイル名); という処理でダウンロードさせようとしています。 サーバーのCSVはデータの書き込みが成功しているのですが、 そのファイルをローカルにダウンロードして中身を確認すると、 XXX,XXX,XXX XXX,XXX,XXX <html> <head> ・・・ のような内容のファイルになっていました。

    • 締切済み
    • 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
  • ファイルのダウンロードが出来ない

    こんばんは。お世話になっております。 CSVファイルをダウンロードさせるスクリプトを作成したのですが、そのスクリプト(ファイル)を、さくらインターネットのサーバへアップすると「ダウンロードせずにブラウザに表示されるだけ」という状態になってしまいます。(ローカル上や別サーバでは問題ない) ファイル上に記述する、Headerですが、サイトによっていくつかの記述方法があったので、以下のように2種類のHeaderを試していますが、共に「さくらインターネットだけがダウンロードしない」状況です。 ファイルをダウンロードさせるスクリプトは、今回初めて作ってみたのですが、他にどのような対処法があるのかが分かりません。考えられる可能性だけでも結構ですので、アドバイスいただけると幸いです。 //Header("Content-type:application/x-csv;"); //header("Content-Disposition: inline; filename=$fname.csv"); header("Content-Type: application/octet-stream;"); header("Content-Disposition: attachment; filename=$fname.csv"); 以上、お忙しい中恐縮ですが宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • fileのダウンロードとページ移動を続けて行うには?

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

    • ベストアンサー
    • 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
  • 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
  • move_uploaded_fileでアップロードしたファイルのダウンロード・解凍

    move_uploaded_fileでzipファイルをアップロードし、 chmodでパーミションを0777に変更しました。 この状態で、直接ファイルを指定すれば、普通にダウンロード・解凍できるのですが、 このファイルを別プログラムから、 header('Content-type: application/octet-stream'); header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'); header('Pragma: no-cache'); header('Content-Disposition: attachment; filename="ファイル名"'); header('Content-Length: ファイルサイズ'); としてfpassthruで開くと、ダウンロードはできますが、解凍ができません。 しばらく考えているのですが、解決できず…。 宜しくお願いします。

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

    下記のようなPHPスクリプトにおいて、zip フォルダに画像ファイルの圧縮ファイルを 保存し、ダウンロードしたいんです。ダウンロードの動作はChrome上で確認できてますが、圧縮した、ダウンロードファイルのサイズが0KB で、空なのです。 どこが間違っているか教えていただけますか? [file_zip.php] <?php mb_internal_encoding("UTF-8"); $ftp = ftp_connect("~"); ftp_login($ftp, "~", "~"); $dir = '/storage2/zip'; ftp_chdir($ftp, $dir); // ディレクトリ移動 // Zipクラスロード $zip = new ZipArchive(); // Zipファイル名 $zipFileName = $_POST['zip_filename']; var_dump($zipFileName); // Zipファイル一時保存ディレクトリ $zipTmpDir = '/storage2/zip'; // Zipファイルオープン $result = $zip->open($zipTmpDir.$zipFileName, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE); if ($result !== true) { // 失敗した時の処理 echo '圧縮ファイルをオープンできませんでした'; exit(); } // ここでDB等から画像イメージ配列を取ってくる $image_data_array = array(); array_unshift($image_data_array, $zipTmpDir.$zipFileName); // 処理制限時間を外す set_time_limit(0); foreach ($image_data_array as $filepath) { $filename = basename($filepath); // 取得ファイルをZipに追加していく $zip->addFromString($filename,file_get_contents($filepath)); } $zip->close(); // ストリームに出力 header('Content-Type: application/zip; name="' . $zipFileName . '"'); header('Content-Disposition: attachment; filename="' . $zipFileName . '"'); header('Content-Length: '.filesize($zipTmpDir.$zipFileName)); echo file_get_contents($zipTmpDir.$zipFileName); // 一時ファイルを削除しておく unlink($zipTmpDir.$zipFileName); // header("Location: storage.php"); ?>

    • 締切済み
    • PHP
  • PHPでファイルをダウンロードさせるコード

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

    • ベストアンサー
    • 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

専門家に質問してみよう