web-dev-qa-db-de.com

Auf einer anderen Seite innerhalb einer PHP Skript

Wie kann ich eine Post-Anfrage an eine andere PHP-Seite innerhalb eines PHP-Skripts stellen? Ich habe einen Front-End-Computer als HTML-Seitenserver, aber wenn der Benutzer auf eine Schaltfläche klickt, möchte ich, dass ein Back-End-Server die Verarbeitung durchführt und die Informationen dann an den Front-End-Server zurückschickt, um den Benutzer anzuzeigen. Ich sagte, dass ich eine PHP-Seite auf dem Backend-Computer haben kann, und die Informationen werden an das Frontend zurückgeschickt. Wie kann ich also erneut eine POST - Anfrage von einer PHP-Seite an eine andere PHP-Seite senden?

27
QAH

Möglicherweise ist der einfachste Weg, um PHP eine POST - Anforderung auszuführen, die Verwendung von cURL , entweder als Erweiterung oder einfach für einen anderen Prozess. Hier ist ein Postbeispiel:

// where are we posting to?
$url = 'http://foo.com/script.php';

// what post fields?
$fields = array(
   'field1' => $field1,
   'field2' => $field2,
);

// build the urlencoded data
$postvars = http_build_query($fields);

// 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, $postvars);

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

// close connection
curl_close($ch);

Schauen Sie sich auch die Zend_Http -Sammlung von Klassen im Zend-Framework an, die einen ziemlich fähigen HTTP-Client bereitstellt, der direkt in PHP geschrieben ist (keine Erweiterungen erforderlich).

2014 EDIT - nun, es ist schon eine Weile her, seit ich das geschrieben habe. Heutzutage lohnt es sich zu überprüfen Guzzle die wiederum mit oder ohne Curlverlängerung arbeiten kann.

44
Paul Dixon

Angenommen, Ihre PHP-Installation hat die CURL-Erweiterung. Dies ist wahrscheinlich der einfachste Weg (und der vollständigste, wenn Sie möchten).

Beispielausschnitt:

//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);

Danksagungen finden Sie unter http://php.dzone.com . Vergessen Sie auch nicht, die entsprechende Seite (n) im Handbuch PHP zu besuchen

6
J.C. Inacio

Informationen zur Verarbeitung von PHP finden Sie in cURL . Damit können Sie Seiten in Ihrem Backend aufrufen und Daten von diesem abrufen. Grundsätzlich würden Sie so etwas tun:

$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);

Sie können auch in die PHP HTTP-Erweiterung schauen.

3
Tyler Carter
  1. Wie der Rest der Benutzer sagt, ist dies mit CURL am einfachsten.

  2. Wenn curl nicht für Sie verfügbar ist, dann vielleicht http://netevil.org/blog/2006/nov/http-post-from-php-without-curl

  3. Wenn das nicht möglich ist, können Sie selbst Sockets schreiben http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

2
Alfred

Obwohl dies nicht ideal ist, versuchen Sie es mit Shell_exec (), wenn die Option cURL dies nicht für Sie tut.

0
user3150875

Die Lösung lautet in target = "_ blank" wie folgt:

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

formular wie folgt bearbeiten:

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

Und benutze dieses Skript:

    <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

Wenn Sie cURL verwenden, beachten Sie, dass die Option CURLOPT_POST als boolescher Wert verwendet wird. In diesem Fall müssen Sie nicht die Anzahl der Felder angeben, die Sie POSTing.
Wenn Sie CURLOPT_POST auf TRUE (dh eine ganze Zahl außer Null) setzen, wird cURL lediglich angewiesen, die Daten als application/x-www-form-urlencoded zu codieren, obwohl dies wahrscheinlich nicht unbedingt erforderlich ist, wenn Sie einen urlencoded-String übergeben CURLOPT_POSTFIELDS, da cURL die Codierung bereits durch den Typ des Werts (string vs array) mitteilen soll, auf den diese letztere Option gesetzt ist.

Beachten Sie außerdem, dass Sie seit PHP 5 die Funktion http_build_query verwenden können, um PHP den Feldarray für Sie wie folgt festzulegen:

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