Perl en Español

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

Pasar varibles de CGI a CGI

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Jue Ago 16, 2007 7:13 am
zozo666
Perlero Frecuente
Perlero Frecuente
Registrado: 26 May 2007
Mensajes: 139
Pasar varibles de CGI a CGI Responder citando

Hola Perleros, quisiera hacerle una consulta, tengo el siguiente código en un CGI llamado paso2.cgi:

Perl:
$t->param(( 'css' => $css,
            'js'  => $js,
            'percent_completed' => '<font id="percent">0%</font>',
            'files_uploaded' => '<font id="files">0</font>',
            'data_uploaded'  => '<font id="current">0</font>',
            'data_total'     => $totalKB,
            'time_spent'     => '<font id="time">0</font>',
            'speed'          => '<font id="speed">0</font>',
            'time_left'      => '<font id="left">0</font>',
            'inline'         => $cgi->param('inline') ? 1 : 0,
         ));


Bueno, lo que necesitaría es alguna forma de pasar la variable $totalKB a un CGI aparte, o sea de este script le envie la información al otro Script, y bueno, este último se encargará de hacer lo que tenga que hacer.

Entonces, ¿cómo establezco una comunicación entre script y script? Muchas Gracias
Mensaje Jue Ago 16, 2007 7:15 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Hola,

En el sitio hay un tutorial acerca de esto:
http://perlenespanol.baboonsoftware.com/tutoriales/cgi/envio_de_datos_a_documentos_post_o_get.html


Saludos
Mensaje Jue Ago 16, 2007 8:01 am
zozo666
Perlero Frecuente
Perlero Frecuente
Registrado: 26 May 2007
Mensajes: 139
Responder citando

Gracias, pero no es lo que necesito.

Necesitaría en sí una forma en la que el CGI que recibe los datos se ejecute solamente una vez, ya que ya tiene una ejecución que le manda otro archivo, por eso lo que necesitaría es una suerte de VARIABLE GLOBAL que la pueda leer el CGI al que le envío los datos y que también esté en el CGI que la hace. Tengo el siguiente código para ver si sirve:

Perl:
for (1..3) {
    last if -e $flength_file;
    sleep 1;
}

&DisplayMessage("No File") unless (-e $flength_file); # No temp files => Upload already finished

my ($total,$ftime) = &getTotalSize($flength_file);
my  $totalKB       = int($total/1024);                # Total file size in Kilobytes
$js =~ s/<TMPL_VAR data_total>/$totalKB/e;

if ($c->{template_file} && !-e $c->{template_file}) {
    print "Invalid template filename";
    exit;
}

my $t = HTML::Template->new( filename => "$c->{templates_dir}/$tmpl_file",
                             die_on_bad_params => 0, );
$t->param(( 'css'               => $css,
            'js'                => $js,
            'percent_completed' => '<font id="percent">0%</font>',
            'files_uploaded'    => '<font id="files">0</font>',
            'data_uploaded'     => '<font id="current">0</font>',
            'data_total'        => $totalKB,
            'time_spent'        => '<font id="time">0</font>',
            'speed'             => '<font id="speed">0</font>',
            'time_left'         => '<font id="left">0</font>',
            'inline'            => $cgi->param('inline') ? 1 : 0,
         ));

print $t->output;


Bueno, con esto muestro lo pasos que seguiría el script para armar el $totalKB, el tema ahora es pasar esta variable a otro script que se encarga de varias cosas, entre ellas de escribir una base de datos, por lo tanto, no lo puedo ejecutar dos veces.
Mensaje Jue Ago 16, 2007 8:53 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
Responder citando

Pues ejecútalo con un system()...

Perl:
system('cgi2.pl', $totalKB);


Si esperas algún valor devuelto en la salida estándar de cgi2.pl, usa qx().

Y si es la última instrucción del cgi1, puedes hacerlo también con un exec().
Mensaje Jue Ago 16, 2007 11:10 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Si cada script está en un servidor diferente, entonces la solución que te mostré es la que deberás de usar, si están en el mismo servidor entonces puedes hacer lo que te dice explorer, de ello también hay un tutorial:
http://perlenespanol.baboonsoftware.com/tutoriales/funciones/ejecutar_programas_externos_a_perl.html

Ahora, quizá tu solución también esté en hacer unos módulos que solamente cargues y que contengan las funciones que quieres.

Saludos
Mensaje Jue Ago 16, 2007 11:21 am
Perl user
Maestro Honorario
Maestro Honorario
Registrado: 03 Nov 2004
Mensajes: 385
Responder citando

Qué tal,

Si sólo es pasar una simple variable a otro proceso, pues utilizar system() podría ser "conveniente". Sin embargo, para intercambiar información entre procesos eso es poco eficiente (genera un proceso en cada petición) aparte que suena muy "ad-hoc".

Una mejor solución es utilizando algún mecanismo de comunicación entre procesos, en este caso mi recomendación es utilizar "shared memory". Este mecanismo permite compartir una región de memoria entre uno o mas procesos, de manera eficiente podrás pasar cualquier mensaje entre uno o mas procesos.

Échale un ojo al espacio de nombres IPC:: hay varios módulos que destacan para ello.

Saludos,
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group