Poster sur une autre page dans un script PHP

Comment puis-je faire une requête post vers une page php différente dans un script php? J'ai un ordinateur frontal que la page html du serveur, mais lorsque l'utilisateur clique sur un bouton, je veux un serveur d'arrière-plan pour le traitement, puis envoyer les informations vers le serveur frontal pour afficher à l'utilisateur. Je disais que je peux avoir une page php sur l'ordinateur de derrière et il enverra l'information de retour à l'avant. Donc encore une fois, Comment puis-je faire une requête POST vers une autre page php, à partir d'un php la page?

26
demandé sur o_O 2009-08-02 04:05:11

7 réponses

peut-être que la façon la plus simple de faire exécuter une requête POST par PHP est d'utiliser cURL un extension ou simplement à un autre procédé. Voici un post exemple:

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

Aussi, découvrez Zend_Http ensemble de classes dans le cadre Zend, qui fournit un client HTTP assez performant écrit directement en PHP (pas d'extensions nécessaires).

2014 EDIT - ça fait longtemps que je n'ai pas écrit ça. Ces jours, il vaut la peine de regarder Bouffer ce qui peut fonctionner avec ou sans l'extension curl.

43
répondu Paul Dixon 2014-10-22 19:19:06

en supposant que votre installation php ait L'extension CURL, c'est probablement la manière la plus facile (et la plus complète, si vous le souhaitez).

exemple d'extrait:

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

les Crédits vont à http://php.dzone.com. Aussi, n'oubliez pas de visiter le approprié page (s) dans le manuel PHP

6
répondu J.C. Inacio 2009-08-02 00:19:14

pour le traitement PHP, regardez cURL. Il vous permettra d'appeler des pages sur votre extrémité arrière et de récupérer des données à partir de celui-ci. Fondamentalement, vous feriez quelque chose comme ceci:

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

Vous pouvez aussi regarder les PHP extension HTTP.

3
répondu Tyler Carter 2009-08-02 00:16:52
  1. comme le reste des utilisateurs disent qu'il est plus facile de le faire avec CURL.

  2. Si curl n'est pas disponible pour vous, alors peut-être http://netevil.org/blog/2006/nov/http-post-from-php-without-curl

  3. Si ce n'est pas possible, vous pouvez écrire vous-même les sockets http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

2
répondu Alfred 2009-08-02 00:42:16

pour ceux qui utilisent cURL, notez que L'option CURLOPT_POST est prise comme valeur booléenne, donc il n'est pas nécessaire de la définir au nombre de champs que vous postez.

Définir CURLOPT_POST à TRUE (i.e. n'importe quel Entier sauf zéro) va juste dire à cURL d'encoder les données comme application / x-www-form-urlencoded, bien que je parie que ce n'est pas strictement nécessaire quand vous passez une chaîne urlencoded comme CURLOPT_POSTFIELDS, puisque cURL devrait déjà indiquer l'encodage par le type de valeur (string vs array) à laquelle cette dernière option est définie.

Notez aussi que, depuis PHP 5, vous pouvez utiliser la fonction http_build_query pour faire de PHP urlencode le tableau fields pour vous, comme ceci:

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
0
répondu matpop 2013-05-13 08:52:32

la Solution est dans target="_blank" comme ceci:

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

modifier le formulaire comme ceci:

<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
répondu Martin Tůma 2016-08-27 14:01:56

méthode CURL est très populaire donc oui, il est bon de l'utiliser. Vous pouvez également expliquer plus de ces codes avec quelques commentaires supplémentaires parce que les débutants pourraient les comprendre.

-4
répondu Pico RG 2009-11-06 03:11:21