¿Puedo hacer una solicitud CURL al mismo servidor?


Necesito implementar una forma de hacer llamadas POST a páginas ubicadas en el mismo servidor o en otro servidor. No podemos usar include porque los archivos a los que estamos llamando suelen llamar a diferentes bases de datos o tienen funciones con el mismo nombre.

He estado tratando de implementar esto usando curl, y aunque funciona perfectamente al llamar archivos desde otro servidor, no consigo absolutamente nada al hacer una llamada al mismo servidor donde está el archivo.

EDITAR PARA AÑADIR ALGÚN CÓDIGO: Un versión simplificada de lo que estoy haciendo:

File1.php

<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "www.myserver.com/File2.php");
curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$result = curl_exec($ch);
curl_close($ch);
echo $result;
?>

File2.php

<?php
echo "I'M IN!!";
?>

Después de llamar a File1.php, no consigo nada, pero si File2.php está en otro servidor, entonces obtengo un resultado. Alguna ayuda?

He intentado usar tanto la URL del servidor (http...) y la dirección total de los archivos (/home / wwww....)

 23
Author: ROMANIA_engineer, 2011-03-24

3 answers

Tenga en cuenta que si está emitiendo la solicitud CURL a su propio sitio, está utilizando el controlador de sesión predeterminado, y la página que está solicitando a través de CURL utiliza la misma sesión que la página que está generando la solicitud, se encontrará con una situación de bloqueo.

El controlador de sesión predeterminado bloquea el archivo de sesión durante la duración de la solicitud de página. Cuando intenta solicitar otra página usando la misma sesión, esa solicitud posterior se colgará hasta que se agote el tiempo de la solicitud o la sesión el archivo está disponible. Dado que está haciendo un CURL interno, el script que ejecuta CURL mantendrá un bloqueo en el archivo de sesión, y la solicitud CURL nunca podrá completarse, ya que la página de destino nunca podrá cargar la sesión.

 47
Author: Marc B,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-23 21:58:07

Porque cuando intentó solicitar al servidor local con la ip pública, apache no pudo resolver a su dominio local. Por lo tanto, debe verificar qué ip local está utilizando apache para ese dominio. Luego necesita editar el archivo/etc / hosts y agregar la nueva fila con ip local más su dominio. Por ejemplo:

Mi ip local para ese dominio en el host virtual de apache es: 172.190.1.120 y mi dominio es mydomain.com Así que añadiré:

172.190.1.120 mydomain.com

Entonces su rizo se funciona correctamente.

 4
Author: Kevin Nguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-09-15 09:22:58

Deberías refactorizar tu código. Además de lo que mencionó Marc B, este enfoque ralentizará innecesariamente su script (potencialmente por un gran margen) y causará mucha confusión. Sin ofender, pero esto es solo una solución increíblemente hacky para la mala lógica.

 2
Author: vladh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-24 00:28:35