Pregunta

¿Cómo puedo hacer una solicitud de publicación en una página php diferente dentro de un script php? Tengo una computadora front-end como servidor de páginas html, pero cuando el usuario hace clic en un botón, quiero que un servidor back-end realice el procesamiento y luego envíe la información al servidor front-end para mostrarle al usuario. Estaba diciendo que puedo tener una página php en la computadora de fondo y que enviará la información de vuelta a la parte delantera. Entonces, una vez más, ¿cómo puedo hacer una solicitud POST a otra página php, desde una página php?

¿Fue útil?

Solución

Posiblemente la forma más fácil de hacer que PHP realice una solicitud POST es usar cURL , ya sea como extension o simplemente desviando a otro proceso. Aquí hay una muestra de publicación:

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

Consulte también conjunto de clases Zend_Http en el marco Zend, que proporciona un cliente HTTP bastante capaz escrito directamente en PHP (no se requieren extensiones).

2014 EDIT - bueno, ha pasado un tiempo desde que escribí eso. En estos días vale la pena comprobar Guzzle , que de nuevo puede funcionar con o sin la extensión de rizo.

Otros consejos

Suponiendo que su instalación de php tenga la extensión CURL, es probablemente la forma más fácil (y más completa, si lo desea).

Fragmento de muestra:

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

Los créditos van a http://php.dzone.com . Además, no olvide visitar las página (s) apropiadas en el manual PHP

Para el procesamiento de PHP, consulte cURL . Le permitirá llamar a páginas en su back-end y recuperar datos de él. Básicamente harías algo como esto:

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

También puede consultar la Extensión HTTP de PHP .

  1. Como el resto de los usuarios dicen que es más fácil hacer esto con CURL.

  2. Si curl no está disponible para ti, entonces tal vez http://netevil.org/blog/2006/ nov / http-post-from-php-without-curl

  3. Si eso no es posible, podría escribir sockets usted mismo http://petewarden.typepad.com/searchbrowser/ 2008/06 / how-to-post-an.html

Para aquellos que usan cURL, tenga en cuenta que la opción CURLOPT_POST se toma como un valor booleano, por lo que en realidad no es necesario establecerla en el número de campos que está PUBLICANDO.
Establecer CURLOPT_POST en TRUE (es decir, cualquier número entero excepto cero) solo le dirá a cURL que codifique los datos como application / x-www-form-urlencoded, aunque apuesto a que esto no es estrictamente necesario cuando pasa una cadena codificada como CURLOPT_POSTFIELDS, ya que cURL ya debería indicar la codificación por el tipo de valor (cadena frente a matriz) en el que está configurada esta última opción.

También tenga en cuenta que, desde PHP 5, puede usar la función http_build_query para hacer que PHP urlencode la matriz de campos para usted, así:

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

La solución está en target = " _blank " así:

http: //www.ozzu. com / website-design-forum / multiple-form-submit-actions-t25024.html

editar formulario como este:

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

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

Aunque no es ideal, si la opción cURL no lo hace por usted, intente usar shell_exec ();

El método CURL es muy popular, así que sí, es bueno usarlo. También podría explicar más esos códigos con algunos comentarios adicionales porque los principiantes podrían entenderlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top