質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

4回答

6095閲覧

file_get_contents()でpostリクエストを送るが理解できていない

fgfnabwym

総合スコア78

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/10/29 14:55

file_get_contents()でpostリクエストを送ることができるという記事を見つけたのですが、やり方が分かりません。
その記事に書いてある通りに書いても、送れていません。

sousin.php

php

1<?php 2//POSTデータ 3$data = array( 4 "param1" => "data1", 5 "param2" => "data2" 6); 7$data = http_build_query($data, "", "&"); 8 9//header 10$header = array( 11 "Content-Type: application/x-www-form-urlencoded", 12 "Content-Length: ".strlen($data) 13); 14 15$context = array( 16 "http" => array( 17 "method" => "POST", 18 "header" => implode("\r\n", $header), 19 "content" => $data 20 ) 21); 22 23$url = "http://localhost/jyusin.php"; 24echo file_get_contents($url, false, stream_context_create($context)); 25?>

ブラウザへの出力
Array ( [param1] => data1 [param2] => data2 )

jyusin.php

php

1<?php 2print_r($_POST); 3?>

ブラウザへの出力
Array ( )
になります。

どこがいけないのか教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ちゃんとsousin.phpからjyusin.phpにPOSTリクエストを送れていますよ。

sousin.phpを開いたときのデータの流れを整理してみましょう。

  1. ブラウザからhttp://localhost/sousin.phpを開く
  2. sousin.phpを実行するとfile_get_contents()でhttp://localhost/jyusin.phpにPOSTする
  3. jyusin.phpはPOSTリクエストを返す。(Array ( [param1] => data1 [param2] => data2 )を返している)
  4. sousin.phpはjyusin.phpのレスポンスをブラウザに返す
  5. ブラウザはsousin.phpのレスポンス、つまりjyusin.phpのレスポンスを表示する

ブラウザで見えるのは最初と最後だけなので途中は見えません。

次にjyusin.phpを開いたときのデータの流れです。

  1. ブラウザからhttp://localhost/jyusin.phpを開く
  2. jyusin.phpを実行するがGETリクエストなので$_POSTは空の配列になる
  3. ブラウザはjyusin.phpのレスポンスとなる空の配列を表示する。

POSTリクエストを確認するためならばjyusin.phpはブラウザから直接開くものではありません。

投稿2015/10/29 15:22

shiena

総合スコア1825

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんばんわ。

https://secure.php.net/manual/ja/function.file-get-contents.php

上記サイトに file-get-contents メソッドの詳細な説明がありますが、
それによると file-get-contents メソッドは postするためのメソッドではないようですね。

投稿2015/10/29 15:02

srsnsts

総合スコア480

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fgfnabwym

2015/10/29 15:20

ありがとうございます。 やってみます。
guest

0

$_POSTとか$_GETってのはリクエストについたパラメータで
リクエストを受けたそのときにだけ使える値です

サーバやブラウザに値を保持された値とかじゃないです
そういうのは$_SESSIONや$_COOKIEの役割です

投稿2015/10/29 15:37

KazuhiroHatano

総合スコア7802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

sousin.php

ブラウザへの出力
Array ( [param1] => data1 [param2] => data2 )

jyusin.phpに送信した結果が、ちゃんと表示されていますね。

jyusin.php
ブラウザへの出力
Array ( )
になります。

まさか、jyusin.phpを直接ブラウザで表示していませんか。

だとすれば、そもそもの考え方、認識が間違っています。

投稿2015/10/29 15:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fgfnabwym

2015/10/29 15:18

jyusin.phpをそのままブラウザで表示しています。 どういうことなのでしょう。jyusin.phpには値を送れているのですよね。jyusin.phpでその値を使うにはどうすればいいですか。
退会済みユーザー

退会済みユーザー

2015/10/29 15:21

そもそもどんな目的で、どんなデータを渡したいのかがわからないので、何とも答えにくいのですが…。 少なくとも、file_get_contens を利用する場面ではなさそうですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問