Pós para outra página dentro de um script PHP
Pergunta
Como posso fazer um pedido post para uma página php diferente dentro de um script php? Eu tenho um computador front-end como o servidor de páginas html, mas quando o usuário clica em um botão, eu quero um servidor back-end para fazer o processamento e, em seguida, enviar a volta informações para o servidor front-end para mostrar ao usuário. Eu estava dizendo que eu possa ter uma página php no computador back-end e vai enviar a volta informações para o front-end. Então mais uma vez, como posso fazer um pedido POST para outra página php, a partir de uma página php?
Solução
Possivelmente a maneira mais fácil de fazer o PHP executar uma solicitação POST é usar cURL , seja como extensão ou simplesmente descascar para fora para outro processo. Aqui está uma amostra 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);
Também confira Zend_Http conjunto de classes no âmbito Zend, que fornece um cliente HTTP muito capaz escrito diretamente em PHP (sem extensões necessárias).
2014 EDIT - bem, ele tem sido um tempo desde que eu escrevi isso. Estes dias vale a pena verificar Guzzle que mais uma vez pode trabalhar com ou sem a extensão de onda.
Outras dicas
Assumindo que o seu php instalar tem a extensão CURL, é provavelmente a maneira mais fácil (e mais completa, se desejar).
trecho de amostra:
//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);
Os créditos vão para http://php.dzone.com . Além disso, não se esqueça de visitar o página (s) apropriado em o manual do PHP
Para o processamento de PHP, olhar para cURL . Ele permitirá que você para chamar páginas em seu back-end e recuperar dados a partir dele. Basicamente, você faria algo assim:
$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);
Você também pode olhar para o PHP Extensão HTTP .
-
Como o resto dos usuários dizem que é mais fácil de fazer isso com CURL.
-
Se onda não está disponível para você, então talvez http://netevil.org/blog/2006/ nov / http-post-de-php-sem-curl
-
Se isso não for possível, você pode escrever-se soquetes http://petewarden.typepad.com/searchbrowser/ 2008/06 / how-to-pós-an.html
Para aqueles usando cURL, nota que a opção CURLOPT_POST é tomado como um valor booleano, então não há realmente nenhuma necessidade de configurá-lo para o número de campos que você está postando.
Definir CURLOPT_POST para TRUE (ou seja, qualquer inteiro, exceto zero) irá apenas dizer cURL para codificar os dados como application / x-www-form-urlencoded, embora eu aposto que isso não é estritamente necessário, quando você está passando uma string urlencoded como CURLOPT_POSTFIELDS, desde cURL já deve contar a codificação pelo tipo do valor (string vs array) que esta última opção é definida como.
Observe também que, desde o PHP 5, você pode usar a função http_build_query para fazer PHP urlencode a matriz campos para você, como esta:
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($fields));
solução está em target = "_ blank" como esta:
http: //www.ozzu. com / site-design-forum / múltipla-form-submit-acções-t25024.html
Editar formulário como este:
<form method="post" action="../booking/step1.php" onsubmit="doubleSubmit(this)">
E usar este 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>
Apesar de não ser ideal, se a opção cURL não fazê-lo para você, pode ser tentar usar shell_exec ();
método CURL é muito popular por isso, sim, é bom usá-lo. Você também poderia explicar mais esses códigos com alguns comentários adicionais, pois os iniciantes poderia compreendê-los.