Domanda

Come posso effettuare una richiesta di post su una pagina php diversa all'interno di uno script php?Ho un computer front-end come server della pagina html, ma quando l'utente fa clic su un pulsante, desidero che un server back-end esegua l'elaborazione e quindi invii le informazioni al server front-end per mostrarle all'utente.Stavo dicendo che posso avere una pagina php sul computer back-end e invierà le informazioni al front-end.Quindi, ancora una volta, come posso eseguire una richiesta POST a un'altra pagina php, da una pagina php?

È stato utile?

Soluzione

Forse il modo più semplice per fare in modo che PHP esegua una richiesta POST è utilizzare arricciare, o come un estensione o semplicemente sborsare per un altro processo.Ecco un esempio di 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);

Controlla anche Zend_Http insieme di classi nel framework Zend, che fornisce un client HTTP abbastanza capace scritto direttamente in PHP (non sono richieste estensioni).

MODIFICA 2014 - beh, è ​​da un po' che non lo scrivo.In questi giorni vale la pena controllare Guzzle che ancora una volta può funzionare con o senza l'estensione del ricciolo.

Altri suggerimenti

Supponendo che l'installazione php abbia l'estensione CURL, è probabilmente il modo più semplice (e più completo, se lo desideri).

Snippet di esempio:

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

I crediti vanno a http://php.dzone.com . Inoltre, non dimenticare di visitare le pagine appropriate in il manuale PHP

Per l'elaborazione di PHP, guarda cURL . Ti permetterà di chiamare le pagine sul tuo back-end e recuperare i dati da esso. Fondamentalmente faresti qualcosa del genere:

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

Puoi anche esaminare Estensione HTTP PHP .

  1. Come il resto degli utenti afferma che è più semplice farlo con CURL.

  2. Se l'arricciatura non è disponibile per te, forse http://netevil.org/blog/2006/ Nov / http-post-da-php-senza-curl

  3. Se ciò non è possibile, è possibile scrivere prese da soli http://petewarden.typepad.com/searchbrowser/ 2008/06 / how-to-post-an.html

Per coloro che usano cURL, nota che l'opzione CURLOPT_POST è considerata come un valore booleano, quindi non è necessario impostarla sul numero di campi che stai postando.
L'impostazione di CURLOPT_POST su TRUE (ovvero qualsiasi numero intero tranne zero) dirà semplicemente a cURL di codificare i dati come application / x-www-form-urlencoded, anche se scommetto che questo non è strettamente necessario quando si passa una stringa codificata come CURLOPT_POSTFIELDS, poiché cURL dovrebbe già indicare la codifica in base al tipo di valore (stringa vs matrice) su cui è impostata quest'ultima opzione.

Inoltre, dal momento che PHP 5, puoi usare la funzione http_build_query per rendere PHP urlencode l'array dei campi per te, in questo modo:

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

La soluzione è in target = " _blank " in questo modo:

http: //www.ozzu. com / sito web-design-forum / multiple-form-submit-azioni-t25024.html

modifica il modulo in questo modo:

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

E usa questo 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>

Sebbene non sia l'ideale, se l'opzione cURL non lo fa per te, potresti provare a usare shell_exec ();

Il metodo CURL è molto popolare, quindi sì, è bene usarlo. Potresti anche spiegare di più quei codici con alcuni commenti extra perché i principianti potrebbero capirli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top