Calling cgi from cgi thru 'system' function. Different behaviour on browser v/s cmd line

From: Shailan (shailan_at_ureach.com)
Date: 12/12/03

  • Next message: Neil Trigger: "Re: Newbie form-mail.pl question"
    Date: 12 Dec 2003 13:50:44 -0800
    
    

    Hi

    Im having trouble with the following code that seems to be behave
    differently when called from the browser as opposed to the command
    line. The calling script is a cgi that forks, with the child trying to
    call another cgi script and pass arguments to it. It works fine from
    the command line, and calls the required script and passes the
    arguments correctly. However, when it is run on the browser, it calls
    the script but does not pass the arguments to it.
    The called script (included) is also a cgi, set up to accept
    parameters via the param function. It accepts the parameters when the
    calling script is run on the command line, but not when the calling
    script is run on the browser.

    I have also tried putting a '?' between the script name and the
    arguments to get the "script.cgi?argument=1" format, and that didnt
    work either.

    Im not sure if the problem is in the system call, the use of CGI in
    the called script, or somewhere else entirely. Any suggestions would
    be extremely helpful...

    Thanks in advance
    Shailan

    #### Calling script

    if (my $pid = fork){
            while (waitpid(-1,&WNOHANG) != $pid){
                    print ".";
                    sleep 2;
            }
            
            print qq{
                    </body>
                    </html>
            };
            
            exit;
    }
    else {
            die "Cannot fork: $!\n" unless defined $pid;
            
            #### Call the actual processing script.
            
            print "Executing $program $args\n";
            ! system("perl", "$program", $args) or die "Call failed: $!";
            #print $output;
            
            exit;
    }

    #### End Calling script
    #### Called script

    #!/usr/local/bin/perl

    use CGI;
    use strict;
     
    my $query = new CGI;
    my $sleep_time = $query->param("sleep");
    my @params = $query->param;

    print "Content-type: text/html\n\n";
    print qq{
            <html>
            <head><title>INF</title>
            </head>
            <body>
            @params
    };

    for (my $i = 0; $i < 10; $i++){
                    print "Working\n";
                    sleep $sleep_time;
            }

    print qq{
    Sleep time was $sleep_time<br>
    Finished
    </body>
    </html>
    };

    exit;
    #### End Called script


  • Next message: Neil Trigger: "Re: Newbie form-mail.pl question"

    Relevant Pages