Question

Comment puis-je faire une demande de publication sur une autre page php dans un script php? J'ai un ordinateur frontal en tant que serveur de page 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 afin de les montrer à l'utilisateur. 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?

Était-ce utile?

La solution

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

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

Vérifiez également les Zend_Http des ensembles de classes du framework Zend, qui fournit un client HTTP très capable écrit directement en PHP (aucune extension requise).

ÉDITER 2014 : eh bien, cela fait longtemps que je n'ai pas écrit cela. De nos jours, il vaut la peine de vérifier Guzzle qui peut à nouveau fonctionner avec ou sans l'extension curl.

Autres conseils

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).

Extrait de code:

//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 . De plus, n'oubliez pas de consulter les page (s) dans le manuel PHP

Pour le traitement de PHP, consultez 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 la extension HTTP PHP .

  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-de-php-sans-boucle

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

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.
Si vous définissez CURLOPT_POST sur TRUE (c’est-à-dire que tout entier sauf zéro), CURL doit simplement coder les données sous la forme application / x-www-form-urlencoded, bien que je parie que cela n’est pas strictement nécessaire lorsque vous transmettez une chaîne codée par un URL sous la forme CURLOPT_POSTFIELDS, car cURL devrait déjà dire au codage par le type de la valeur (chaîne vs tableau) que cette dernière option est définie sur.

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

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

La solution est dans target = " _blank " comme ceci:

http: //www.ozzu. com / site-design-forum / actions-formes-multiples-soumission-t25024.html

modifier le formulaire comme ceci:

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

Et utilisez ce script:

    <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>

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

La méthode CURL est très populaire, donc oui, il est bon de l’utiliser. Vous pouvez également expliquer davantage ces codes avec des commentaires supplémentaires, car les débutants pourraient les comprendre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top