A CGI script can't ask for input, it has to receive it in the first place, i.e. given by an HTML page web form. If it doesn't receive the input it wants, it should print a warning and quit.
Hitting submit on this webpage will cause it to load a URL like http://mysite/cgi-bin/myscript.cgi?somevalue1=asdf&somevalue2=qwerty . The method="get" is important, since POST requests work differently.
The entire string somevalue1=asdf&somevalue2=qwerty will be found in QUERY_STRING which you can process as you please. I often do something like:
Code:
OLDIFS="$IFS"
IFS="&="
set -- $QUERY_STRING
IFS="$OLDIFS"
...which will leave $1 as "somevalue1", $2 as "asdf", $3 as "somevalue2", and $4 as "qwerty". set -- is a special, ancient syntax which sets the shell's $1 $2 ... argument variables, and IFS is a special variable which controls what characters the shell splits on - usually spaces, but here we use it to split the CGI string on ampersands and equals.
You can process that in a loop like
Code:
OLDIFS="$IFS" ; IFS="&=" ; set -- $QUERY_STRING ; IFS="$OLDIFS"
# HTML header must come before any other text is printed
echo "Content-type: text/plain"
echo
echo "QUERY_STRING was ${QUERY_STRING}"
while [ "$#" -gt 0 ] # Loop until $#, number of arguments, is zero
do
case "$1" in
somevalue1) echo "somevalue1 got $2" ;;
somevalue2) echo "somevalue2 got $2" ;;
*) ;;
esac
shift 2 # Delete $1 and $2, and move $3 $4 down
done
Last edited by Corona688; 05-29-2017 at 12:54 PM..
Hi,
My server is set up so that all cgi scripts are run as user nobody, instead of the user's username.
Now I know you can use cgi-wrappers, but someone please give me detailed information, on how to make ALL scripts run on the server to by default, run as the user? And not to run as user... (1 Reply)
If I have a Perl CGI script (script01), which fills an array(s) with information and outputs a HTML page with a link to another CGI page (script02); is there anyway to pass the array(s) from "script01" to "script02" when the page visitor clicks the link?
Hope that makes sense!
:) (2 Replies)
Hi,
I'm developing a system which requires me to run a ksh script from within a cgi script. What sort of syntax will I need to do this, I'm sure it's simple but can't find out how anywhere!
Thanks. (2 Replies)
All,
I would like to run a cgi script in cygwin which i have installed in WinXP.
My CYGWIN directory structure is
/var/www/
drwxrwx---+ 2 user Users 0 Nov 23 16:24 cgi-bin
drwxrwx---+ 3 user Users 0 Oct 22 17:21 htdocs
drwxrwx---+ 3 user Users 0 Oct 22 17:22 icons
and another... (1 Reply)
Hi guys,
got a problem with a perl cgi script over here. I need it to run a system command to get the status of a process. Unfortunately the process is owned by a specific user and only this user can get its status. So i tried running the command from the perl cgi with "su", but then i get the... (12 Replies)
I have interesting problem.
https:/host/some/x.cgi
- this script has run twice when I call this url
But
http:/host/some/x.cgi
work fine, only once.
Output is text/plain.
If I change output format to the Content-type text/html,
then both urls works fine - executed only once. (2 Replies)
Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted!
1. The problem statement, all variables and given/known data:
This is a problem I am having with my 2 semester senior project. I have a LAMP server running Ubuntu 9.10 with... (8 Replies)
Hi
I am Run Perl CGI Script. In which i am running SCP Command. But I want that command to be run into background and exit the script. But Still Web page waiting for Finish the script.
I m doing like :
system ("scp -r machinename:/path/to/file/for/copy/ /path/for/ destination/directory/ &");... (3 Replies)
Hi everyone,
I want to kill process through the web, so I create html page with single bottom that run kill command in shell script with CGI.
Here is html code:
<td><form METHOD="GET" action="http://IP:port/cgi_bin/script.cgi" > <input type="submit" value= "Submit" > <INPUT name="q"... (7 Replies)
Hello,
I want to run this script on my CentOS 6 via browser :
________________________________________________________________________________________________
#!/bin/sh
echo Username?
read MY_NAME
echo Provisional file name?
read MY_FILE
echo File NAME you want to save?
read MY_FILE2... (16 Replies)
Discussion started by: juta2020
16 Replies
LEARN ABOUT DEBIAN
plack::app::cgibin
Plack::App::CGIBin(3pm) User Contributed Perl Documentation Plack::App::CGIBin(3pm)NAME
Plack::App::CGIBin - cgi-bin replacement for Plack servers
SYNOPSIS
use Plack::App::CGIBin;
use Plack::Builder;
my $app = Plack::App::CGIBin->new(root => "/path/to/cgi-bin")->to_app;
builder {
mount "/cgi-bin" => $app;
};
# Or from the command line
plackup -MPlack::App::CGIBin -e 'Plack::App::CGIBin->new(root => "/path/to/cgi-bin")->to_app'
DESCRIPTION
Plack::App::CGIBin allows you to load CGI scripts from a directory and convert them into a PSGI application.
This would give you the extreme easiness when you have bunch of old CGI scripts that is loaded using cgi-bin of Apache web server.
HOW IT WORKS
This application checks if a given file path is a perl script and if so, uses CGI::Compile to compile a CGI script into a sub (like
ModPerl::Registry) and then run it as a persistent application using CGI::Emulate::PSGI.
If the given file is not a perl script, it executes the script just like a normal CGI script with fork & exec. This is like a normal web
server mode and no performance benefit is achieved.
The default mechanism to determine if a given file is a Perl script is as follows:
o Check if the filename ends with ".pl". If yes, it is a Perl script.
o Open the file and see if the shebang (first line of the file) contains the word "perl" (like "#!/usr/bin/perl"). If yes, it is a Perl
script.
You can customize this behavior by passing "exec_cb" callback, which takes a file path to its first argument.
For example, if your perl-based CGI script uses lots of global variables and such and are not ready to run on a persistent environment, you
can do:
my $app = Plack::App::CGIBin->new(
root => "/path/to/cgi-bin",
exec_cb => sub { 1 },
)->to_app;
to always force the execute option for any files.
AUTHOR
Tatsuhiko Miyagawa
SEE ALSO
Plack::App::File CGI::Emulate::PSGI CGI::Compile Plack::App::WrapCGI
See also Plack::App::WrapCGI if you compile one CGI script into a PSGI application without serving CGI scripts from a directory, to remove
overhead of filesystem lookups, etc.
perl v5.14.2 2011-11-02 Plack::App::CGIBin(3pm)