web-dev-qa-db-ja.com

PHPスクリプト内の別のページに投稿する

Phpスクリプト内の別のphpページに投稿リクエストを送信するにはどうすればよいですか? htmlページサーバーとしてフロントエンドコンピューターを1台持っていますが、ユーザーがボタンをクリックすると、バックエンドサーバーに処理を実行させてから、情報をフロントエンドサーバーに送信してユーザーを表示させます。私はバックエンドのコンピューターにphpページを置くことができ、フロントエンドに情報を送り返すと言っていました。だからもう一度、どうすればPOST phpページから別のphpページへのリクエストを行うことができますか?

27
QAH

PHPインストールにCURL拡張機能があると仮定すると、おそらくそれが最も簡単な方法です(必要に応じて最も完全な方法です)。

サンプルスニペット:

//set POST variables
$url = 'http://domain.com/get-post.php';
$fields = array(
                      'lname'=>urlencode($last_name),
                      'fname'=>urlencode($first_name),
                      'email'=>urlencode($email)
               );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

クレジットは http://php.dzone.com に移動します。また、適切な page(s) のPHP Manual

6
J.C. Inacio

PHP処理については、 cURL を調べてください。バックエンドでページを呼び出し、そこからデータを取得できます。基本的には次のようにします。

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL,$fetch_url);
curl_setopt ($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt ($ch,CURLOPT_USERAGENT, $user_agent;
curl_setopt ($ch,CURLOPT_CONNECTTIMEOUT,60);
$response = curl_exec ( $ch );
curl_close($ch);

PHP HTTP拡張 を調べることもできます。

3
Tyler Carter
  1. 他のユーザーが言うように、これはCURLで行うのが最も簡単です。

  2. Curlが利用できない場合は、多分 http://netevil.org/blog/2006/nov/http-post-from-php-without-curl

  3. それが不可能な場合は、自分でソケットを書くことができます http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

2
Alfred

理想的ではありませんが、cURLオプションがあなたのためにそれをしないなら、Shell_exec()を使用してみてください。

0
user3150875

ソリューションは、このようにtarget = "_ blank"にあります。

http://www.ozzu.com/website-design-forum/multiple-form-submit-actions-t25024.html

次のようなフォームを編集します。

<form method="post" action="../booking/step1.php" onsubmit="doubleSubmit(this)">

そして、このスクリプトを使用します。

    <script type="text/javascript">
<!--
function doubleSubmit(f)
{
  // submit to action in form
  f.submit();
  // set second action and submit
  f.target="_blank";
  f.action="../booking/vytvor.php";
  f.submit();
  return false;
}
//-->
</script>
0
Martin Tůma

CURLを使用している場合は、CURLOPT_POSTオプションがブール値として取得されるため、POSTするフィールドの数に実際に設定する必要はありません。
CURLOPT_POSTをTRUE(ゼロ以外の任意の整数)に設定すると、cURLにデータをapplication/x-www-form-urlencodedとしてエンコードするように指示されますが、urlencodedを渡す場合、これは厳密には必要ありませんCURLOPT_POSTFIELDSとしての文字列。cURLは、この後者のオプションが設定されている値のタイプ(文字列と配列)によってエンコードをすでに指示しているはずです。

また、PHP 5なので、http_build_query関数を使用してPHP urlencodeのフィールド配列を次のように作成できます。

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
0
matpop