• Publicidad

Restricciones de system

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Restricciones de system

Notapor timon » 2008-08-22 17:57 @789

Buenos días a todos. Mi nombre es Jorge.

Estoy integrando el TPV de La Caixa en una ONG y tengo una duda.

Desde PHP he llamado a través de Curl a un script en Perl para poder ejecutar una aplicación del sistema que devuelve una URL (que es a la que tengo que enviar el formulario de pago).

El caso es que en el pequeño script en Perl, ejecuto un comando cualquiera como ls -l, funciona perfectamente y lo veo por pantalla, pero al ejecutar la aplicación (la cual se ejecuta perfectamente por consola) no se ve nada.

¿Existe alguna restricción? El ejecutable (un .sh), tiene los permisos 777.

Un saludo y gracias por adelantado.
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Publicidad

Notapor explorer » 2008-08-22 22:17 @970

Bienvenido a los foros de Perl en Español, timon.

Pero, ¿la aplicación debería devolver algo?

En estos foros hay algunos hilos al respecto del intercambio de información entre PHP y Perl. Usa el sistema de búsqueda (si no te funciona, usa Google sobre este sitio).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor timon » 2008-08-23 05:53 @287

Muchas gracias por responder Explorer.

La verdad es que muchos tenemos que agradecer las prontas respuestas que das.

Respecto al tema, sí, la aplicación devuelve una URL. El caso es que la aplicación funciona en consola, y también funciona en web pero en la máquina que tengo de demo es una Ubuntu (yo ataco desde otra distinta). En producción está sobre una CentOS, y es ahí donde no va.

¿Existe algún tipo especial de parámetro? Te muestro los dos ficheros:

tpv.php //este php mira tpv.cgi para que le devuelva la url
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <?php 
  2. $ch = curl_init(); 
  3. curl_setopt($ch, CURLOPT_URL, 'http://www.midominio.es/cgi-bin/test/tpv.cgi'); 
  4. curl_setopt($ch, CURLOPT_HEADER, false); 
  5. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
  6. $resultado = curl_exec($ch); 
  7. $error = curl_error($ch); 
  8. curl_close($ch); 
  9. echo $resultado; 
  10. ?> 


tpv.cgi //este es el fichero que me debería de devolver el resultado de la consulta al sistema
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
my $sentencia = `/usr/local/tpv/CrURLtpv.sh`;
print "Content-type: text/html \n\n";
print("<html>\n");
print("<head>\n");
print("<title>\"TPV\"</title>\n");
print("</head>\n");
print("<body>\n");
print "<h1>$sentencia</h1> \n";
print("</body>\n");
print("</html>\n");
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El tema de comunicación entre PHP y Perl no me preocupa, está resuelto, el tema es que la orden de Perl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $sentencia = `/usr/local/tpv/CrURLtpv.sh`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
no funciona; sin embargo sí lo hace si lo sustituyo por un
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
my $sentencia = `ls -l`;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Curioso, ¿no? (ya dije antes que por consola sí funciona y en la máquina de pruebas también, solo es en producción con un CentOS donde no va).

Un saludo.
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Notapor explorer » 2008-08-23 06:40 @319

Es muy importante que veas los ficheros log de actividad del CentOS, sobre todo el de errores. Cuéntanos si ves algo raro.

Yo sospecho que puede tratarse de un problema de enjaulado (chroot). O quizás, el usuario que ejecuta el servidor web no tiene permiso para entrar en la carpeta /usr/local/tpv/.

Repasa: las carpetas que llevan hasta CrURLtpv.sh deben tener permisos de lectura y ejecución para el usuario que ejecuta el servidor web. En caso extremo y fácil, ponle 755 de permisos. Y para el ejecutable, también te vale un 755.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor timon » 2008-08-23 12:34 @565

Muchas Gracias por responder.

Pues lo de los permisos fue lo primero que revisé y tiene permisos tanto los ficheros como la carpeta de 755.

He pensado en el tema del CHROOT y he instalado la aplicación dentro del directorio de trabajo del usuario Apache, es más, dentro del directorio protegido del usuario: /var/www/vhost/midominio.com/tpv,
y sigue igual: por consola funciona y también en la máquina de demo (no es una máquina con virtual host), pero si intento ejecutarlo en la de producción, nada de nada, en los logs del Apache no dice nada, y en los de /var/log/messages tampoco dice nada, es más, he hecho dentro de /var/log la siguiente búsqueda: find . -type f | xargs grep "tpv.sh" para buscar en todos los logs algo referente al tema, y no ofrece ningún resultado.

¿Dónde puedo ver los errores de Perl cuando se ejecuta como CGI? o, ¿qué orden puedo pasar dentro del CGI para que me informe de errores durante su ejecución en formato HTML?

Un saludo y muchas gracias de nuevo.
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Notapor explorer » 2008-08-23 13:06 @587

En los logs debería salir, al menos, la petición CGI que hace el php. Si no sale, malo.

En cuanto a la forma de presentar los fallos en la página HTML, usa el módulo CGI::Carp, como verás en mi CGI mínimo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor timon » 2008-08-24 05:57 @289

Bueno ya voy encaminando el tema.
En efecto, al colocar el tpv.cgi en el vhost default, o sea, en /var/www/vhost/default/cgi-bin/ y haciendo la llamada a http://123.123.123.123/cgi-bin/tpv.cgi, consigo un error en el /etc/log/httpd/error_log. Es un error de Java, debe ser por cuestiones del PATH... pero vamos, que no tiene nada que ver con Perl... es cosa ya de configuración del Java... (es casi peor... le tengo mucha manía al Java).

Muchas gracias por las respuestas, en cuanto dé con la solución la publico para el saber general.
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Notapor explorer » 2008-08-24 06:20 @305

Un momento...

¿Tenemos un PHP, que llama a un Perl, que llama a un sh, que llama a un Java?

¿A quién se le ha ocurrido semejante engendro?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor timon » 2008-08-24 11:28 @519

¡¡¡JAJAJAJA!!!, ¡¡pues sí!!, se les ha ocurrido en parte a los del banco, por hacer el TPV en Java accesible desde el sistema, pasándole parámetros a un .sh.

El caso es que para poder pasar parámetros al .sh, no se puede hacer directamente a través de PHP, por restricciones de seguridad, entonces lo que se hace es invocar a un .cgi hecho en Perl a través de CURL... un engendro, sí... y además sigo sin saber cómo arreglar el tema del PATH. De java, no sé cómo indicarle al interprete de Perl qué PATH debe de tener cuando se ejecuta el CGI.
timon
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-08-22 08:59 @416

Notapor explorer » 2008-08-24 11:52 @536

Bien, pues entonces, a ese engendro, me sobra el PHP y el sh. Quiero decir que se puede hacer una llamada al cgi y éste, llamar al java.

En cuanto a lo del PATH, puedes cambiar el trabajo del programa, con chdir().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Siguiente

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados