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?

Foi útil?

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 .

  1. Como o resto dos usuários dizem que é mais fácil de fazer isso com CURL.

  2. Se onda não está disponível para você, então talvez http://netevil.org/blog/2006/ nov / http-post-de-php-sem-curl

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top