PHPで動的に生成されるCSVをサーバーに保存

このQ&Aのポイント
  • PHPを使用して動的に生成されるCSVファイルをWEBサーバーに保存する方法について
  • wgetコマンドを使用して保存しようとするとCSVファイルではなくPHPページが保存される問題が発生する
  • ブラウザのURLバーで直接アクセスするとCSVファイルの保存画面が表示されるが、別の方法があるかどうかを知りたい
回答を見る
  • ベストアンサー

PHPで動的に生成されるCSVをサーバーに保存

業務処理を自動化するためにPHPで動的に生成されるCSVファイルを、WEBサーバーに保存したいと思っています。 wgetコマンドを使って保存しようと思っていますが、リンクにGETパラメータ?(http://hogehoge.com/hoge.php?hoge=1&hoge=2)が設定されているためかcsvが生成さずPHPページ(hoge.php)が保存されてしまいます。 実行したwgetコマンド /usr/local/bin/wget /home/useraccount/www/hoghog/hog.csv 'http://hogehoge.com/hoge.php?hoge=1&hoge=2' -O - また、phpファイルを生成し、 <?php $file = 'http://hogehoge.com/hoge.php?hoge=1&hoge=2'; $newfile = 'test.csv'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; } ?> と上記のようにやっても同じ結果でした。 ブラウザ上のURLバーでhttp://hogehoge.com/hoge.php?hoge=1&hoge=2とするとCSVファイルの保存画面が出てくるページなのですが、何か良い方法はありませんでしょうか。 よろしくお願いします。

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

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

  • ベストアンサー
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

んー、よく分かってないまま回答しますが、 file_get_contents からの file_put_contents では どうでしょう? QUERY_STRING は設定に依存するかもですけど。

kan-chi
質問者

補足

結局、私が取得しようとしたページはユーザーログイン後のページで、PHPからはログイン処理が確認ができないために、CSVを取得できないようでした。 ログイン処理などの問題がなければ、自分の意図する処理ができそうでしたので、bm_hiroさんの方法でできましたので、ベストアンサーにさせていただきます。 ご回答ありがとうございました。

その他の回答 (1)

回答No.2

PHPの問題というよりwget コマンドのオプションの問題 man wget すべし。 http://okwave.jp/qa/q2976936.html

kan-chi
質問者

補足

ちゃんとヘルプを見るべきですね。 ご回答ありがとうございました。

関連するQ&A

  • PHPとCSVの表示 もっとスマートにしたい

    現在PHPに手を出し始めた初心者です まだ分からない事だらけですが、できれば教えてください CSVファイルからデータを読み込んで表示するということを 苦戦しながらやっております ただ、1つのPHPファイルだけでの表示方法がわからず、今は3つのPHPファイルにしています 目的は大区分を選択後、小区分の一覧が表示され、小区分の1つを選択すると詳細が表示される という感じのものです まずCSVファイル 大区分,小区分,名称,詳細 1,101,hoge1,詳細1 1,102,hoge2,詳細2 2,201,hogex1,詳細x1 2,202,hogex2,詳細x2 3,301,hogexx1,詳細xx1 という感じに分けています で1つ目のhoge0.phpで <a href="hoge1.php?code=1">大区分(1)</a> ・・・ code が 1 なら hoge1.php で 小区分 1 の一覧を表示します 次に2つ目のhoge1.phpで $code = $_GET['code']; $lines = file('hoge.csv'); foreach($lines as $line) { $line = rtrim($line); list($bno,$sno,$name,$detail) = explode(",", $line); if ($bno==$code) { echo "<a href=hoge2.php?type=$sno>詳細</a>".$name."<br>"; } } type が 101 なら hoge2.php で 小区分 101 にある hoge1 項目の詳細を表示します 最後3つ目のhoge2.phpで $type = $_GET['type']; $lines = file('hoge.csv'); foreach($lines as $line) { $line = rtrim($line); list($bno,$sno,$name,$detail) = explode(",", $line);{ if ($no==$type) { echo $name.$detail; } } } 一応これでやりたい事は実現できたのですが、あまりにも不恰好で・・・ これを1つのPHP内で処理できるようにするにはどうしたらいいでしょうか? スマートになるやり方があれば教えてください

    • ベストアンサー
    • PHP
  • phpでAuthorizationヘッダを追加

    Basic認証をかけた場所のファイルを別の場所にコピーしたいです。 コピーだけは、 $file = 'http://~~~.html'; $newfile = 'new.html'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; } とすればできるところまでは調べ、 Basic認証のかかっていない場所のファイルで試して、成功しました。 書籍もいろいろと手にとってみましたが、 ヘッダを送信することについて書かれているものをあまり見つけられず、 検索してみても、いまひとつよく分かりません。 コピペして使える形であれば正直なところ助かりますが、贅沢は申しません。 phpは必要な部分だけ調べて使っているような素人で、 今回のことも、header()を使うのだろう、というところまでしか分からないのですが、 理解の助けになるようなアドバイスをいただければありがたいです。

    • ベストアンサー
    • PHP
  • PHP CSV 出力

    失礼します。 現在PHPで指定したパスに置いてあるCSVを出力したいのですが、 CSVは出力できているのですが、HTMLが先頭に入ってしまいます。 htmlファイルに設置したボタンに対して phpファイルで処理をしています。 どこかおかしい部分があればご教授頂きたいです。 HTMLファイル <?php $self = $_SERVER["SCRIPT_NAME"]; ?> <form method='POST' action='<?php $self ?>'> <input type='submit' value='CSV出力' name='get_csv'> </form> PHPファイル function This_Month(){ $filepath = 'hoge.csv'; //ダウンロードしたいファイルパス $filename = 'test.csv'; //ダウンロードした際のファイル名 if(!file_exists($filepath)){ die("Error:File(".$filepath.") does not exist"); } //オープンできるか確認 if(!($fp = fopen($filepath,"r"))) { die("Error:Cannot open the file(".$filepath.")"); } fclose($fp); //ファイルサイズの確認 if(($content_length = filesize($filepath)) == 0){ die("Error:File size is 0.(".$filepath.")"); } //ファイルの処理方法 header('Content-Disposition: attachement; filename="'.$filename.'"'); //ファイルタイプ指定 header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding:binary'); //ファイルサイズ header('Content-Length: '.filesize($filepath)); mb_convert_encoding($filepath,'utf-8','shift-jis'); readfile($filepath); exit(); } //ボタンに合わせて条件を変えていく if(isset($_POST["get_csv"])){ //ユーザーから来たデータをエスケープする $csv_output = htmlspecialchars($_POST["get_csv"], ENT_QUOTES, "UTF-8"); switch ($csv_output) { case "CSV出力": ”This_Month();  break; default: echo "エラー"; exit; } }

    • ベストアンサー
    • PHP
  • phpのCSVの保存について教えてください

    下記のようにinputタグから値をphpにおくり、csvファイルに保存しようとしています。 値1に12345 値2に67890 値3にあいうえお というように値を送って保存し、csvファイルを開くと、 12345," 67890",あいうえお というように、値2として送ったものの先頭にダブルコーテーションとスペース、最後にダブルコーテーションが勝手に入ってしまいます。なぜ何でしょうか?対処法も含め教えていただければありがたいです。よろしくお願いします。 --------------------html---------------------------------- <form action="send.php" method="post"> 値1:<input type="text" name="aaa" > 値2:<input type="text" name="bbb" > 値3:<input type="text" name="ccc" > <input type="submit" value="送信する"> </form> --------------------php---------------------------------- <?php $val[0] = $_POST['aaa']; $val[1] = $_POST['bbb']; $val[2] = $_POST['ccc']; $fp = fopen("valdata.csv", "a"); fputcsv($fp, $val); fclose($fp); ?>

    • ベストアンサー
    • PHP
  • CSVファイルをブラウザのキャッシュに残さない方法

    とある調査ページをPHPでつくっています。 結果データをCSVに書き出し、ページにCSVへのリンクを張ってダウンロード出来るようにしていますが、ブラウザにキャッシュが残ってしまうので、連続して調査をするとCSVをダウンロードしても以前のCSVがダウンロードされてしまいます。 現在は苦肉の策としてURLにランダムなパラメータをつけて回避しています。 http://hoge.com/hoge.csv?1 http://hoge.com/hoge.csv?2 http://hoge.com/hoge.csv?3 等々 もっとスマートにキャッシュを残さない方法は有りますか? ブラウザの設定を…というのは無しでお願いします。 ちなみに、当方プログラマーではないためあまり難しいプログラムは出来ません…。 その点を加味してお答え頂ければ幸いです。

    • ベストアンサー
    • PHP
  • PHPからバッチ実行

    exec('hogehoge.bat'); PHPから上記コマンドでバッチを実行すると hogehoge.bat ECHO hoge > hogehoge.log DIR \\Server1\hoge*.* > C:\hoge\hoge.log hogehoge.logにはキチンとhogeと書いてありますが hoge.logは作成されますが真っ白なままです。 NET USE F: \\Server1 ドライブに割り当てて試してみましたがダメでした。 なにかいい方法はございませんでしょうか? Win XP Apache_2.0.59 php-4.4.4

    • ベストアンサー
    • PHP
  • postgresql-CSV生成時の文字化け

    お世話になります。 実行環境:  OS:Win8.1 64bit  PostgreSQLのバージョン:9.5.3-1  client_encoding:SJIS  データベースエンコーディング:EUC_JP C C 以上のような環境でローカルフォルダにCSVを出力することを 考えていますが、ファイル名に日本語が含まれるCSVを出力 すると文字化けします。 正常なケース:  COPY (select * from db) TO 'D:\pos\hoge.csv' (FORMAT csv); 異常なケース:  COPY (select * from db) TO 'D:\pos\ほげほげ.csv' (FORMAT csv);  →ファイル名が文字化け。   ただし、レコードの中身は文字化けせず出力できている。 文字化けせずに日本語ファイルを出力できるのが理想です。 対処法はありますでしょうか? --そもそもCOPYコマンドのファイル名のエンコードはどこで設定するのでしょうか?

  • CSV出力のダブルクォーテーションについて

    ウェブアプリからCSV出力を行いたいのですが 出力行の両端に「"」(ダブルクォーテーション)が一緒に出力されます。 このダブルクォーテーションを出力したくありません。どうすればいいでしょうか?ご教授お願いします。 ちなみに下記は自分で作った例です。また使用するクラスはCSV::Writer以外でもかまいません。 class hoge  def exprt   cntnt_type = "text/csv"   ##ファイル名称の設定   file_name = "hoge.csv"   ##CSVオブジェクトを生成し、データをセットしていく   CSV::Writer.generate(output = "") do |csv|     csv << ["hoge", "fuga"]   end   ##CSVファイルの出力   send_data(output, :type => cntnt_type, :filename => file_name) end

  • シェルでcdの履歴保存

    $ cd hogehoge と打ってディレクトリにいろいろ移動するかと思いますが, cd の履歴をどこかファイルに保存しておいて そのファイルから cd hogehoge を再利用するのは可能でしょうか? zshで同じようなコマンドはありますが $ cd - 0 -- /home/hoge 1 -- /home/hoge/Pictures これでは端末を閉じたときに履歴が保存されません できれば zsh か bash で実現させたいのですが可能でしょうか?

  • ***.php?1 等というリンクをクリックすると、ページが自動的に生成されるPHP

    http://XXXXX.com/****.php?1 http://XXXXX.com/****.php?2 ↓ http://XXXXX.com/****.php?50 などというリンクをクリックすると、外部のファイルの一部分を読み込み、 ページに反映させてページを自動的に生成する方法を教えていただけない でしょうか? 急遽、ページのコンテンツの一部分がすべて異なるページを50枚ほど作ら なくてはならなくなってしまい、PHPで動的に作成出来ないものかと思っ てのことでした。 PHPはほぼ初心者で、本屋を回ってPHPの書籍を読みあさってみたのです が、どのような手法を用いているのか見当もつかず、困っております・・・ どなたかご教授いただけないでしょうか? (検索語句や、書籍を探す際のヒントをいただけるだけでも有り難いです)

    • 締切済み
    • PHP

専門家に質問してみよう