PDA

Ver la Versión Completa : LLamada a un cgi desde php


apicito
25-10-2005, 11:16:27
LLamada a un cgi desde php
Estoy intentando hacer una llamada a un cgi hecho en delphi desde un scrip php y no consigo que me funcione.
Utilizo IIS sobre un servidor w2003 y php5.
La llamada la hago así:
$enlace=include('/p3.exe/sesasunto?part='.$part.'&sesion='.$p5.'&paxina='.$p7);

Me da el siguiente error:
Código:
failed to open stream: HTTP request failed! HTTP/1.1 404 Objeto no encontrado in d:\aWeb\www\novas.php on line 79
Alguien puede ayudarme.

kayetano
25-10-2005, 18:59:17
Hola

Si lo que quieres es ejecutar un cgi debes utilizar funciones del tipo passthru o exec.

apicito
26-10-2005, 08:22:10
El método que estoy utilizando funciona bien ya que el cgi delphi genera un stream que se muestra corectamente en la página web. Mi problema es que para que funcione tengo que ponerle antes del nombre del ejecutable el http://misitio.com/
de forma que cuando hago pruebas en local va bien pero al subirlo al servidor remoto se relentiza mucho la carga, upongo que la razón es que tiene que cargar el cgi a través de http. Lo que trato de hacer es configurar, no sé si en el IIS o en el php, el sitio de forma que permita hacer un include directo del cgi, es decir, llamarlo así:
$enlace=include('p3.exe/sesasunto?part='.$part.'&sesion='.$p5.'&paxina='.$p7);
en vez de así:
$enlace=include('http://misitio.com/p3.exe/sesasunto?part='.$part.'&sesion='.$p5.'&paxina='.$p7);

Por cierto, he probado a utilizar passthru y exec y no me muestra nada en la página.
$enlace='p3.exe?sesasunto?part='.$part.'&sesion='.$p5.'&paxina='.$p7;
passthru($enlace,$salida);

kayetano
26-10-2005, 10:28:20
Hola

Te cuento, "include" lo que hace es abrir un archivo y meter su contenido dentro de otro, tu problema reside en que el CGI no se interpreta desde local sino que intenta abrirlo a piñon, al añadir "http..." estas haciendo que el servidor interprete el CGI y te devuelva, supongo, codigo HTML.

Con passthru realiza la ejecución del CGI y muestra el resultado por la salida estandar, el problema que veo es como estas pasando los parametros, que debería ser del tipo:
$enlace='p3.exe/sesasunto '.$part.' '.$p5.' '.$p7;
passthru($enlace,$salida);

Supongo que "sesasunto" es el CGI.

apicito
26-10-2005, 13:33:39
No, el cgi es p3.exe, que es web server application de delphi. Dentro de este cgi existe un webmodule y dentro de éste varias actions, una de ellas es "sesasunto". Como te he dicho la forma en que hago la llamada funciona bien, incluso ahora que cambie el tipo del web server application de cgi a ISAPI (dll). Mi problema es que no se que tengo que cambiar en la configuración (del IIS o del Php) para que me permita hacer la llamada directa al exe o dll, ya que si no le pongo el http://misitio.com/ no lo encuentra y al hacer la llamada a través de http: se hace demasiado lento ya que tiene que bajarse a traves de web los 2 megas que pesa el p3.exe o el p3.dll.

kayetano
26-10-2005, 14:15:31
Hola

Esto es lo que he econtrado


Incluir en el conf de httpd la siguiente linea:

AddHandler isapi-isa .dll

y tambien en:

ScriptAlias /cgi-bin/ "C:/Archivos de programa/Apache Group/Apache2/cgi-bin/"

<Directory "C:/Archivos de programa/Apache Group/Apache2/cgi-bin">
AllowOverride None
Options Indexes Includes ExecCGI
Order allow,deny
Allow from all
</Directory>


por defecto la opcion de Options es None y hay que cambiarla por Indexes Includes ExecCGI


No lo he probado porque nunca se me ha dado el caso pero Igual te sirve de algo.