home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / tsw / TSW_3.4.0.exe / Apache2 / perl / asp-perl < prev    next >
Encoding:
Text File  |  2004-01-29  |  3.7 KB  |  154 lines

  1. #!/usr/bin/perl
  2.  
  3. # for more accurate per request time accounting
  4. BEGIN {
  5.     eval "use Time::HiRes";
  6.     $Apache::ASP::QuickStartTime = eval { &Time::HiRes::time(); } || time();
  7. }
  8.  
  9. # help section
  10. use File::Basename;
  11. use Getopt::Std;
  12. use Cwd;
  13. use Carp qw(confess);
  14. use Apache::ASP::CGI;
  15.  
  16. =pod
  17.  
  18. =head1 NAME
  19.  
  20. asp-perl - Apache::ASP CGI and command line script processor
  21.  
  22. =head1 SYNOPSIS
  23.  
  24. asp-perl [-hsdb] [-f asp.conf] [-o directory] file1 @arguments file2 @arguments ...
  25.  
  26.     -h  Help you are getting now!
  27.     -f  Specify an alternate configuration file other than ./asp.conf
  28.     -s  Setup $Session and $Application state for script.
  29.     -d  Set to debug code upon errors.
  30.     -b  Only return body of document, no headers.
  31.     -o  Output directory, writes to files there instead of STDOUT
  32.     -p  GlobalPackage config, what perl package are the scripts compiled in.
  33.  
  34. =head1 DESCRIPTION
  35.  
  36. This program will run Apache::ASP scripts from the command line.
  37. Each file that is specified will be run, and the 
  38. $Request->QueryString() and $Request->Form() data will be 
  39. initialized by the @arguments following the script file name.  
  40.  
  41. The @arguments will be written as space separated 
  42. words, and will be initialized as an associate array where
  43. %arguments = @arguments.  As an example:
  44.  
  45.  asp-perl file.asp key1 value1 key2 value2
  46.  
  47. would be similar to calling the file.asp in a web environment like
  48.  
  49.  /file.asp?key1=value1&key2=value2
  50.  
  51. The asp.conf script will be read from the current directory
  52. for parameters that would be set with PerlSetVar normally under
  53. mod_perl.  For more information on how to configure the asp.conf
  54. file, please see < http://www.apache-asp.org/cgi.html > 
  55.  
  56. =head1 SEE ALSO
  57.  
  58. perldoc Apache::ASP, and also http://www.apache-asp.org
  59.  
  60. =head1 COPYRIGHT
  61.  
  62. Copyright 1998-2004 Joshua Chamas, Chamas Enterprises Inc.
  63.  
  64. This program is distributed under the GPL.  Please see the LICENSE
  65. file in the Apache::ASP distribution for more information.
  66.  
  67. =cut
  68.  
  69. $SIG{__DIE__} = \&confess;
  70. getopts('hsdbo:p:f:');
  71.  
  72. if($opt_h || ! @ARGV) {
  73.     open(SCRIPT, $0) || die("can't open $0 for reading: $!");
  74.     my $script = join('', <SCRIPT>);
  75.     close SCRIPT;
  76.     $script =~ /=pod\s(.*?)=cut/s;
  77.     my $pod = $1;
  78.     $pod =~ s/\=head1 (\w+)/$1/isg;
  79.     $pod =~ s/DESCRIPTION.*//isg;
  80.     print $pod;
  81.     print "\"perldoc asp-perl\" or \"man asp-perl\" for more information\n\n";
  82.  
  83.     exit;
  84. }
  85.  
  86. if($opt_o && ! -e $opt_o) {
  87.     mkdir($opt_o, 0750) || die("can't mkdir $opt_o");    
  88. }
  89.  
  90. $Config = '';
  91. my $config_file = $opt_f || 'asp.conf';
  92. if(-e $config_file) {
  93.     # read in .asp to load %Config
  94.     open(CONFIG, $config_file) || die("can't open $config_file: $!");
  95.     $Config = join('', <CONFIG>);
  96.     close CONFIG;
  97. } else {
  98.     if($opt_f) {
  99.     die("Configuration file $opt_f does not exist!");
  100.     }
  101. }
  102.  
  103. my $cwd = cwd();
  104. while(@ARGV) {
  105.     $cwd && (chdir($cwd) || die("can't chdir to $cwd"));
  106.     my $file = shift @ARGV;
  107.     my @script_args;
  108.  
  109.     unless(-e $file) {
  110.     print "file $file does not exist\n";
  111.     next;
  112.     }
  113.  
  114.     while(@ARGV) {
  115.     last if(-e $ARGV[0]);
  116.     push(@script_args, shift @ARGV);
  117.     }
  118.     
  119.     if($opt_o) {
  120.     my $basename = basename($file);
  121.     open(STDOUT, ">$opt_o/$basename") || die("can't open $opt_o/$basename for writing");
  122.     }
  123.  
  124.     $r = Apache::ASP::CGI->init($file, @script_args);
  125.     $0 = $file; # might need real $0 in $Config
  126.     eval $Config;
  127.     $@ && die("can't eval config error: $@");
  128.  
  129.     $r->dir_config->set('NoState', 0) if $opt_s;
  130.     if($opt_d) {
  131.     $r->dir_config->set('Debug', -3);
  132.     $r->dir_config->set('CommandLine', 1);
  133.     }
  134.     if($opt_b) {
  135.     $r->dir_config->set('NoHeaders', 1);
  136.     }
  137.     if($opt_p) {
  138.     $r->dir_config->set('GlobalPackage', $opt_p);
  139.     }
  140.  
  141.     for(keys %Config) {
  142.     $r->dir_config->set($_, $Config{$_});
  143.     }
  144.  
  145.     &Apache::ASP::handler($r);
  146.  
  147.     if($opt_o) {
  148.     close STDOUT;
  149.     }
  150.     
  151. }
  152.  
  153.  
  154.