Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Muy urgente: Perl con PHP

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Mar Jun 19, 2007 12:45 pm
alagua
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Jun 2007
Mensajes: 5
Muy urgente: Perl con PHP Responder citando

Atención necesitamos ayuda urgente ya que nos es imprescindible tener esto funcionando para mañana, os expongo la cuestión:
Tenemos un script Perl (.pl), que queremos ejecutar desde un cliente en PHP.
En lugar de ejecutarse aparece un cuadro de descarga para descargar el archivo en cuestión.
Lo tenemos ubicado en la carpeta /usr/lib/cgi-bin/, y los permisos de ejecución para todos los usuarios están correctamente asignados.
Por favor es muy urgente solventar este problema, por ultimo decir que usamos apache2.
Gracias de antemano Smile
Mensaje Mar Jun 19, 2007 2:28 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Checa que la primera línea tenga la dirección del intérprete de Perl y que el Apache esté configurado para ejecutar los .pl

Saludos
Mensaje Mar Jun 19, 2007 2:47 pm
alagua
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Jun 2007
Mensajes: 5
Responder citando

Muchas gracias por tu ayuda. ¿Alguno de los lectores podría poner o redactar cómo configurar Apache2 para que ejecute archivos.pl? Gracias de antemano ^^
Mensaje Mar Jun 19, 2007 3:52 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Respondida quizás aquí:
http://perlenespanol.baboonsoftware.com/foro/viewtopic.php?t=1687
Mensaje Mar Jun 19, 2007 4:13 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

No necesitas configurar el Apache para nada.

Cuando se ejecuta el PHP, lo está haciendo en el Apache, como un proceso más, por lo que puedes ejecutar (en teoría) otros procesos de la máquina, entre ellos, hacer un system() (como se muestra en el hilo que te indiqué) y esperar el valor de vuelta.

El único problema es si no tienes permiso de ejecución de programas externos al script PHP. Entonces sí que deberás configurar el Perl como si fuera un CGI y hacer una petición al servidor web como si fuera una petición externa.
Mensaje Mar Jun 19, 2007 6:16 pm
alagua
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Jun 2007
Mensajes: 5
Responder citando

A ver, este es el código de llamada al script
HTML:
//header("Location: /cgi-bin/actualiza.pl");
echo "<META HTTP-EQUIV='refresh' CONTENT='2;URL=/cgi-bin/actualiza.pl'>";

El problema es que el código no es mío, estamos trabajando sobre código de otras personas y me cuesta muchísimo ver los posibles errores. Si alguien me dice si ve algo raro por favor que me lo diga...

Aquí les adjunto el script que estamos utilizando, actualiza.pl, que a su vez hace una llamada a otro script, actualiza2.pl. Como os decía la llamada hace que aparezca como descarga de archivo ¡y lo que yo quiero es ejecutar el script!
Otra vez... gracias de antemano a todos.

Perl:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "<html><body bgcolor=”#FFFFCC”>\n";
`./actualiza2.pl` || die(“ERROR”);
print "<center><br><br><font color='green'>EL FIREWALL SE HA ACTUALIZADO
</font></center>\n"
;
print "<META HTTP-EQUIV='refresh' CONTENT='2; URL = http://192.168.1.24/vaciocentral.php'>\n";
print "</body></html>";
Mensaje Mar Jun 19, 2007 6:31 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Bien, el script no tiene problemas, salvo quizás que está haciendo referencia a actualiza2.pl de forma relativa y eso puede provocar después que no lo encuentre.

Pero vuestro problema es que no ejecuta actualiza.pl. Es un CGI y como tal hay que ejecutarlo.

Debéis configurar Apache2 para que los pueda ejecutar. Editad la configuración del servidor y buscar la sección relativa a los CGI. Si está comentada, descomentarla. Fijaros también en: qué parte de disco duro hay que instalar los cgi y bajo qué directorio virtual hay que invocarlos.

Por ejemplo, en mi servidor los scripts cgi se colocan en el directorio /usr/lib/cgi/ y se invocan de la forma: http://www.midominio.com/cgi-bin/script.pl

Hay que mirar también la extensión del archivo que tenga definida para ese directorio. En casi todos los casos se podrá poner como .pl y/o .cgi.
Mensaje Mar Jun 19, 2007 6:45 pm
alagua
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Jun 2007
Mensajes: 5
Responder citando

¿Serías tan amable de copiarme aquí las secciones de tu fichero de configuración que hacen referencia a los cgi? (supongo que será el apache2.conf). Mira yo te pongo el mío a ver que le observas, perdona por la sobredosis de preguntas pero créeme es que es muy urgente:

Esto es de apache2.conf
Código:
    # To use CGI scripts outside of ScriptAliased directories:
    # (You will also need to add "ExecCGI" to the "Options" directive.)
    #
    AddHandler cgi-script .cgi

y esto de default en site-avaiables:

NameVirtualHost *
<VirtualHost *>
   ServerAdmin webmaster@localhost
   
   DocumentRoot /var/www/
   <Directory />
      Options FollowSymLinks
      AllowOverride None
   </Directory>
   <Directory /var/www/>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride None
      Order allow,deny
      allow from all
      # This directive allows us to have apache2's default start page
                # in /apache2-default/, but still have / go to the right place
                RedirectMatch ^/$ /apache2-default/
   </Directory>

   ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/"
   #ScriptAlias /cgi-bin/ /usr/local//
   <Directory "/usr/lib/cig-bin/">
      AllowOverride None
      #Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
      Options +ExecCGI
      Order allow,deny
      Allow from all
   </Directory>

   ErrorLog /var/log/apache2/error.log

   # Possible values include: debug, info, notice, warn, error, crit,
   # alert, emerg.
   LogLevel warn

   CustomLog /var/log/apache2/access.log combined
   ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>
Mensaje Mar Jun 19, 2007 7:30 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4086
Ubicación: Valladolid, España
Responder citando

Lo interesante de CGI está a partir de la línea ScriptAlias.

ScriptAlias /cgi-bin/ "/usr/lib/cgi-bin/" indica el directorio donde debes colocar tus scripts.

Y luego veo que hay un error. Pone

<Directory "/usr/lib/cig-bin/">

cuando debería ser

<Directory "/usr/lib/cgi-bin/">

(hay un par de letras cambiadas).

El resto lo veo bien. Es casi idéntico al mío.

Veréis más pistas mirando los ficheros de log (/var/log/apache2/access.log /var/log/apache2/error.log)
Mensaje Mar Jun 19, 2007 8:41 pm
alagua
Perlero Nuevo
Perlero Nuevo
Registrado: 19 Jun 2007
Mensajes: 5
Responder citando

muchas gracias por todo, de verdad, ya parece que esto funciona, menos mal xD en cuatro horas tengo que entregarlo ^^
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group