web-dev-qa-db-fra.com

Publier sur une autre page dans un PHP scénario

Comment puis-je faire une demande de publication à une autre page php dans un script php? J'ai un ordinateur frontal en tant que serveur de pages html, mais lorsque l'utilisateur clique sur un bouton, je souhaite qu'un serveur dorsal effectue le traitement, puis renvoie les informations au serveur frontal pour les afficher. Je disais que je peux avoir une page php sur l'ordinateur back-end et qu'il enverra les informations au serveur. Alors encore une fois, comment puis-je faire une demande POST vers une autre page php, à partir d'une page php?

27
QAH

Le moyen le plus simple de forcer PHP à exécuter une requête POST est d'utiliser cURL , soit en tant que extension , soit simplement en passant à un autre processus. Voici un exemple de post:

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

Consultez également Zend_Http un ensemble de classes dans le framework Zend, qui fournit un client HTTP très capable écrit directement dans PHP (aucune extension requise).

2014 EDIT - eh bien, cela fait longtemps que je n'ai pas écrit cela. Ces jours-ci, cela vaut la peine de vérifier Guzzle qui peut à nouveau fonctionner avec ou sans l'extension Curl.

44
Paul Dixon

En supposant que votre installation php porte l’extension CURL, c’est probablement le moyen le plus simple (et le plus complet, 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 se trouvent sur http://php.dzone.com . N'oubliez pas de visiter les pages appropriées dans le manuel PHP

6
J.C. Inacio

Pour le traitement de PHP, regardez dans cURL . Il vous permettra d’appeler des pages sur votre back-end et d’en récupérer les données. 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 également consulter l'extension PHP HTTP .

3
Tyler Carter
  1. Comme le reste des utilisateurs, 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 cela n’est pas possible, vous pouvez écrire vous-même des sockets http://petewarden.typepad.com/searchbrowser/2008/06/how-to-post-an.html

2
Alfred

Bien que cela ne soit pas idéal, si l'option cURL ne le fait pas pour vous, essayez peut-être d'utiliser Shell_exec ();

0
user3150875

Pour ceux qui utilisent cURL, notez que l’option CURLOPT_POST est considérée comme une valeur booléenne. Il n’est donc pas nécessaire de la définir en fonction du nombre de champs que vous postez.
Régler CURLOPT_POST sur TRUE (c’est-à-dire tout entier sauf zéro) indiquera simplement à cURL de coder les données comme suit: application/x-www-form-urlencoded CURLOPT_POSTFIELDS, puisque cURL devrait déjà indiquer le codage par le type de la valeur (string vs array) à laquelle cette dernière option est définie.

Notez également que, depuis PHP 5, vous pouvez utiliser la fonction http_build_query pour créer PHP urlencode le tableau de champs pour vous, comme ceci:

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