• 締切済み

phpを実行するとファイルダウンロードになる

教えてください 以下のプログラムを記述したphpを実行すると、ファイルダウンロードになってしまいます ※プログラムはあるサイトにPOST送信をするものです 解決方法を教えてください よろしくお願いします <?php //ホスト設定 $host = "aaa.bbb.jp"; //パス設定 $path = "/data.php"; //POSTデータ設定 $data = "AAA=111&BBB=222&CCC=333&DDD=444"; //URLエンコード $data = urlencode($data); //実行 header("POST " . $path . " HTTP/1.1\r\n"); header("Host: " . $host . "\r\n"); header("Content-type: application/x-www-form-urlencoded\r\n"); header("Content-length: " . strlen($data) . "\r\n\r\n"); header($data); exit(0); ?>

  • ktone
  • お礼率3% (2/54)
  • PHP
  • 回答数2
  • ありがとう数0

みんなの回答

  • Gotthold
  • ベストアンサー率47% (396/832)
回答No.2

> ※プログラムはあるサイトにPOST送信をするものです その記述だとクライアント(ブラウザ)に対してPOSTしているのでは? あと、その記述だと $data はヘッダに入るけど意図通り? (Content-lengthが45なのにContentが空っぽだけど) 以下はブラウザが受け取るであろうレスポンス。 POST /data.php HTTP/1.1 Host: aaa.bbb.jp Content-type: application/x-www-form-urlencoded Content-length: 45 AAA%3D111%26BBB%3D222%26CCC%3D333%26DDD%3D444 (Contentは空)

  • edomin7777
  • ベストアンサー率40% (711/1750)
回答No.1

PHPファイル自体をダウンロードしようとしちゃうってこと? それなら、PHPじゃなくて設定自体がおかしい。

ktone
質問者

補足

他のphpプログラムは問題なく動作しております 提示しましたプログラムコードのみの話となります ファイルダウンロードをすると、プログラム名で空(0バイト)ファイルが作成されます また以下の記述が特に問題かなと思っています header("Content-type: application/x-www-form-urlencoded\r\n");

関連するQ&A

  • PHPでトラックバック送信しようとしているのですが・・

    下のような関数を作ってトラックバックを送信する機能を実装しようとしていますが、全く上手くいきません・・。$targeturlなどの引数の値は別のPHPスクリプトから取得しています。 やっかいなのは、このプログラムを実行してもエラーが出ないことです。そのため、どこが問題なのか全く分かりません。最後の変数$resの中身も空っぽです。さっぱりわかりません・・。どうか助けてください・・。 function sendTBPing($targeturl, $topicid, $title, $excerpt){   $port = 80;   $query = "";   // POSTするデータの作成   $post = "title=".urlencode(mb_convert_encoding($title,   "UTF-8"));   $post = $post."&url=".urlencode("http://users.mswave.com/~tsugio/blog/archives.php?topicid=". $topicid);   $post = $post."&excerpt=".urlencode(mb_convert_encoding($excerpt, "UTF-8"));   $post = $post."&blog_name=".urlencode(mb_convert_encoding('sample', "UTF-8"));      // ping先URLからホスト名やパスを取り出す   $pingurl = parse_url($targeturl);   if(isset($pingurl['query'])){ $query = "?".$pingurl['query'];   }   if(isset($pingurl['port'])){ $port = $pingurl['port'];   }   // HTTPリクエストの作成   $req = "POST".$pingurl['path'].$query."HTTP/1.1\r\n";   $req = $req."Host: ".$pingurl['host']."\r\n";   $req = $req."User-Agent: PHP/".phpversion()."\r\n";   $req = $req."Content-type: application/x-www-form-urlencoded\r\n";   $req = $req."Content-Length: ".strlen($post)."\r\n\r\n";   $req = $req.$post."\r\n";   // ソケットを開く   $fn = fsockopen($pingurl['host'], $port);   if($fn === false){ throw new exception("トラックバックPINGに失敗しました");   }   // 送信   fputs($fn, $req);   // レスポンス受信   $res = "";   while(!feof($fn)){ $res = $res.fgets($fn);   }   fclose($fn);  // レスポンスのボディに<error>1</error>が含まれていればエラー   list($rhead, $rbody) = split("\r\n\r\n", $res, 2);   $rbody = urlencode($rbody);   if(strstr($rbody, "<error>1</error>") !== false){ throw new exception($rbody);   } }

    • ベストアンサー
    • PHP
  • postしたコンテンツの取得

    いつもお世話になっております。 PHPでHTTPでPOSTされたコンテンツを受け取るサンプルとして以下のような スクリプトを作成しました。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> </head> <body> <p><?php var_dump(file_get_contents('php://input')); ?></p> </body> </html> そしてデータの送信側のPHPスクリプトとして以下のようなものを作成しました。 <?php function post_request($url, $data, $referer='') { // Convert the data array into URL Parameters like a=b&foo=bar etc. $data = http_build_query($data); // parse the given URL $url = parse_url($url); if ($url['scheme'] != 'http') { die('Error: Only HTTP request are supported !'); } // extract host and path: $host = $url['host']; $path = $url['path']; $port = $url['port']; var_dump($url); $fp = fsockopen($host, $port, $errno, $errstr, 30); if ($fp){ // send the request headers: fputs($fp, "POST $path HTTP/1.1\r\n"); fputs($fp, "Host: $host\r\n"); if ($referer != '') fputs($fp, "Referer: $referer\r\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n"); fputs($fp, "Content-length: ". strlen($data) ."\r\n"); fputs($fp, "Connection: close\r\n\r\n"); fputs($fp, $data); $result = ''; while(!feof($fp)) { // receive the results of the request $result .= fgets($fp, 128); } } else { return array( 'status' => 'err', 'error' => "$errstr ($errno)" ); } // close the socket connection: fclose($fp); // split the result header from the content $result = explode("\r\n\r\n", $result, 2); $header = isset($result[0]) ? $result[0] : ''; $content = isset($result[1]) ? $result[1] : ''; // return as structured array: return array( 'status' => 'ok', 'header' => $header, 'content' => $content ); } $fileHandle = fopen("/home/a/text.txt", "rb"); $fileContents = stream_get_contents($fileHandle); fclose($fileHandle); var_dump(post_request('http://ipaddress/rawpost.php',$fileContents)); ?> 上記PHPスクリプトによってPOSTされた結果のHTMLの var_dump(file_get_contents('php://input')) の部分はstring(0)となりました。 HTTPのPOSTのコンテンツ部分を取得するには どのようなスクリプトを記載すればよいのでしょうか。 どなたかご教授よろしくお願いいたします。

    • 締切済み
    • PHP
  • バイナリファイルをダウンロードできなくなりました。

    バイナリファイルをダウンロードできなくなりました。 以下のように、fopen で取得したバイナリデータをブラウザにダウンロードさせていましたが、ある時からダウンロードできなくなりました。 ・プログラムコードは変更していません。 ・同様の処理をしている全ての箇所が失敗するようになりました。 ・いずれも、かつては正常に動作していました。 ・ApacheやPHPはエラーメッセージを出力していません。 Apacheの設定またはPHPの設定を変えてしまったのかな、と推測していますが、原因がつかめていません。 検討がつかないので困っています。推測できる原因をご提示ください。 [環境] CentOS 5.3 (ルート権限も持っている、完全にコントロールできる環境です) PHP 5.1.6 Apache 2.2.3 [問題のコード その1] $ret=''; $handle = @fopen($file_name, 'r'); if ($handle) { while (!feof($handle)) $ret.=fread($handle, 8192); fclose($handle); } header('Content-disposition: attachment; filename="'.$src.'"'); header('Content-type: audio/3gpp'); header('Cache-Control: private'); header('x-jphone-copyright: no-transfer'); die($ret); [問題のコード その2] $url = "http://chart.apis.google.com/chart?".http_build_query($query); $img = @imagecreatefrompng($urls); $img = @imagerotate($img,270,0); header('Content-Type: image/jpeg'); imagejpeg($img); [問題のコード その3] $url = "http://example.net/example.php"; $options = array('http' => array( "method" => 'POST', "header" => "Content-Type: application/x-www-form-urlencoded\r\n" "content" => http_build_query($data), )); $contents = @file_get_contents($url, false, stream_context_create($options)); //書きだし header('Content-Type: application/x-shockwave-flash'); header('Content-Length: '.strlen($contents)); print $contents;

    • 締切済み
    • PHP
  • 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
  • ロリポップでPHPを動かしたい。

    ロリポップでPHPを動かしたいのですが、ローカルでは動作するのに、 サーバー上では動作しません。 セーフモードはOFFにしてみたり、してみたのですが。 ↓im.kayac.comを使い、iphoneに通知を送る処理です。 <?php $username = 'XXXX'; $password = 'XXXX'; $data = array( "message" => "ほげほえ", "password" => $password, ); $data['sig'] = sha1($data['message'] . $data['password']); unset($data['password']); $data = http_build_query($data, "", "&"); //header $header = array( "Content-Type: application/x-www-form-urlencoded", "Content-Length: ".strlen($data) ); $context = array( "http" => array( "method" => "POST", "header" => implode("rn", $header), "content" => $data ) ); $url = "http://im.kayac.com/api/post/{$username}"; echo file_get_contents($url, false, stream_context_create($context)); ?>

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

    お世話になります。ダウンロードボタンを付けてファイルのダウンロードを行う処理で困った事になってます。 (DL.php) $file_name=htmlspecialchars(@$_POST['file_name']); $file_name=addslashes($file_name); mb_convert_variables("SJIS-WIN","EUC-JP",$file_name); $file_to=htmlspecialchars(@$_POST['file_to']); $file_to=addslashes(@$_POST['file_to']); header ("Content-Disposition: attachment; filename=".$file_name); header ("Content-type: application/octet-stream"); require_once("dl_config.php"); readfile ($data_pas.$file_to); dl_config.php <?PHP $data_pas="/data/"; ?> この状態でテキストファイルをダウンロードすると、DLしたファイルの中に不要な改行ファイルが挿入されています。 またrequire_once("dl_config.php");を削除し readfile ($data_pas.$file_to);を readfile ("/data/".$file_to);とすると、改行は入らなくて、正常なファイルがダウンロードされます。 よろしくお願いします。

    • 締切済み
    • PHP
  • ファイルをダウンロードしたい

    PHPでDBから取ってきたデータをエクセルに出力し、ダウンロードさせる プログラムを書いていますが、うまくいきません。 処理の流れは以下のようになっています。 ----------------------------------------------------- ◇top.php(ダウンロードボタン押下) ↓ ◇action.php実行 さらにこの中で、 ・logic.php実行→DBからデータ取得 ・excel.php実行(ダウンロードボタン押下時のみ) logicからデータをもらってエクセルファイル生成。 header("Content-type: application/vnd.ms-excel"); header("Content-Disposition: attachment; filename=\"$filename\""); ・view.php実行→Smartyでtop.phpの画面表示(top.tpl) (logicからviewに値を渡してデータを画面表示) ----------------------------------------------------- この処理だと、ダウンロードされるファイルが生成したものでなく、 top.phpをダウンロードしてしまうんです。(中身はHTMLですけど。) 同じような質問がありましたが、結局どうしたらいいのか・・ http://oshiete1.goo.ne.jp/kotaeru.php3?q=1432459 top.phpにはデータを表示していて、ダウンロードボタンも付いている って感じです。ボタンを押した時の挙動をどうしたらいいのか、いまいち 分かりません。 よろしくお願いします。

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

    PHPでDBに接続してテーブルのバックアップを取るプログラム(ファイルのダウンロード)を作成していますが、 上手く動作しません。 bktbl.phpにアクセスすると、HTML部分まで「test.csv」として保存されてしまいます。 何故なのでしょうか。。 どなたか教えて下さい。よろしくお願いします。 (プログラム内で間違ってる部分もあれば・・教えて頂きたく) 逆に、バックアップしたファイルをインポートする場合は、pg_copy_fromでいけますよね? bktbl.php <?php //DB接続処理 ・・・・   ・・・・ $rows = pg_copy_to($connection,"テーブル名");; //DB切断処理 ・・・・   ・・・・ $file = implode("\r\n", $rows); $file_size = strlen($file); header("Content-type: application/x-csv"); header("Content-Disposition: inline; filename=test.csv"); header("Content-Length: $file_size"); print $file; ?> <HTML> HTML記述部分 </HTML>

    • ベストアンサー
    • PHP
  • IE6でダウンロードさせたい【PHP】

    IE6でダウンロードさせたい【PHP】 現在、PHPからのヘッダ出力を使って ファイルダウンロードさせるプログラムを作成しています。 (PHPスクリプトが呼ばれると、 ダウンロードダイアログが出現する) FireFoxでは問題なく動作するのですが、 IE6だと動作しません。(ダイアログが出ない) ※ちなみに、SSLは使ってません。 --↓ソース------------------- header("Content-Disposition: inline; filename=\"".basename($path_file)."\""); header("Content-Length: ".$content_length); header("Content-Type: application/octet-stream"); readfile($path_file) ---------------------------------- -IE6のHTTPヘッダ(デバッガで抽出)-- HTTP/1.1 200 OK Date: Thu, 20 May 2010 07:35:19 GMT Server: Apache/2.2.11 (Win32) DAV/2 mod_ssl/2.2.11 OpenSSL/0.9.8i PHP/5.2.9 X-Powered-By: PHP/5.2.9 Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache Content-Disposition: inline; filename="20100520_133719_irai_1.txt" Content-Length: 2415 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: application/octet-stream ---------------------------------- どなたか解決策に心当たりのある方、ご教授宜しくお願いします!

    • ベストアンサー
    • PHP

専門家に質問してみよう