• Publicidad

Muy urgente: Perl con PHP

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Muy urgente: Perl con PHP

Notapor alagua » 2007-06-19 13:45 @615

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 :)
alagua
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-06-19 13:37 @609

Publicidad

Notapor monoswim » 2007-06-19 15:28 @686

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor alagua » 2007-06-19 15:47 @699

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 ^^
alagua
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-06-19 13:37 @609

Notapor explorer » 2007-06-19 16:52 @745

Respondida quizás aquí:
viewtopic.php?t=1687
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 explorer » 2007-06-19 17:13 @759

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.
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 alagua » 2007-06-19 19:16 @845

A ver, este es el código de llamada al script
Sintáxis: [ Descargar ] [ Ocultar ]
  1. //header("Location: /cgi-bin/actualiza.pl"); 
  2. 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.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/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>";
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
alagua
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-06-19 13:37 @609

Notapor explorer » 2007-06-19 19:31 @855

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.
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 alagua » 2007-06-19 19:45 @864

¿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: Seleccionar todo
    # 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>
alagua
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-06-19 13:37 @609

Notapor explorer » 2007-06-19 20:30 @896

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)
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 alagua » 2007-06-19 21:41 @945

muchas gracias por todo, de verdad, ya parece que esto funciona, menos mal xD en cuatro horas tengo que entregarlo ^^
alagua
Perlero nuevo
Perlero nuevo
 
Mensajes: 5
Registrado: 2007-06-19 13:37 @609


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron