标签: cgi

在Perl脚本中使用ARGV和CGI

我正在编写一个可以从命令行和网页运行的Perl脚本.该脚本接收几个参数,如果它从命令行开始,则通过$ ARGV读取这些参数,如果从网页开始,则从CGI读取这些参数.我怎样才能做到这一点?

my $username;
my $cgi = new CGI;
#IF CGI
$username = $cgi->param('username');
#IF COMMAND LINE
$username = $ARGV[0];
Run Code Online (Sandbox Code Playgroud)

parameters perl command-line cgi

7
推荐指数
3
解决办法
2949
查看次数

如何从Windows上的Perl CGI脚本分叉后台进程?

在Windows上运行时,我在使用Perl CGI脚本分析进程时遇到了一些问题.主要问题似乎是在Windows上运行时模拟"fork",并且实际上似乎并没有创建新进程(只是当前的另一个线程).这意味着等待进程完成的Web服务器(如IIS)将继续等待"后台"进程完成.

有没有办法从Windows下的CGI脚本中分离后台进程?更好的是,我可以调用一个以跨平台方式执行此操作的功能吗?

(只是为了让生活变得更加困难,我真的想要一个将分叉进程输出重定向到文件的好方法).

windows perl cgi fork background

6
推荐指数
1
解决办法
5115
查看次数

Guile计划和CGI?

我最近发现CGI脚本几乎可以用任何可以打印到stdout的语言编写.我写了一个小的guile cgi脚本,可以在我的本地apache安装上运行,但不能在我的共享主机上运行:

#!/usr/local/bin/guile -s 
!#
(display "Content-Type: text/html")
(newline)
(newline)
(display "hi")
(newline)
Run Code Online (Sandbox Code Playgroud)

当我通过ssh从主机上的shell运行脚本时,这是输出:

$ ./scheme.cgi
Content-Type: text/html

hi
Run Code Online (Sandbox Code Playgroud)

所以,显然我的主机安装了guile.但是,当我尝试在浏览器中访问此文件时,出现"500 Internal Server Error".查看我的错误日志时,我发现我遇到了可怕的"脚本标头过早结束"错误:

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] (2)No such file or directory:
exec of '/home/www/vhosts/jcw.geekisp.com/cgi-bin/scheme.cgi' failed

[server.com] [Tue Aug 17 00:54:19 2010] [error] [client xx.xx.xx.xxx] Premature end 
of script headers: scheme.cgi
Run Code Online (Sandbox Code Playgroud)

因为我在共享主机上,使用mod_lisp或guile的fastcgi实现是不可能的.话虽这么说,这可能是什么问题?类似的cgi脚本我用python,perl,ruby和sh编写的服务器上没有错误.我看到主机上安装了guile 1.8.7,但我的本地机器是最新版本.

我知道这是一个令人难以置信的小众问题,任何帮助将不胜感激!

scheme cgi guile apache2

6
推荐指数
1
解决办法
1062
查看次数

如何使用Perl将客户端从一个CGI页面重定向到另一个CGI页面?

我的问题如下.密码被识别为有效后我需要重定向到main.cgi但是我收到的消息为:

Status: 302 Found
Location: http://localhost/cgi-bin/Main.cgi
Run Code Online (Sandbox Code Playgroud)

我知道这样做的原因是我之后正在写这个语句,Content-Type所以它将它作为HTML并在屏幕上打印.我是Perl的新手.任何人都可以帮我找到解决方案,让我的代码按照我想要的方式工作吗?或者请为我建议一些替代代码,或任何可能帮助我的链接.

#!C:\perl\bin\perl.exe
use strict;
use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use DBI;
my $q = new CGI;

print "Content-Type: text/html\n\n";

if ($q->param("Login")) {
    my $Password = param('Password');
    if (!$Password) {
        print "Please Enter the Password";
    } else {
        my $dbh = DBI->connect(
            "dbi:SQLite:DEVICE.db",
            "", "",
            {
                RaiseError => 1,
                AutoCommit => 1
            }
        );
        my $sth = $dbh->prepare("select * from Settings where Password = ?");
        $sth->execute($Password);
        if (my $pass …
Run Code Online (Sandbox Code Playgroud)

perl cgi

6
推荐指数
2
解决办法
3万
查看次数

CGI脚本中的纯文本密码是安全漏洞吗?

我已经读过你的网络服务器出了问题,这可能导致在网络浏览器中将PHP脚本显示为纯文本文件; 因此,我将大多数PHP脚本移动到Web根目录之外的目录中.现在我一直想知道我的cgi-bin中的CGI脚本是否会发生同样的情况.

我主要关心的是一个包含MySQL数据库用户名和密码的脚本.如果这是一个可能的安全漏洞(至少就数据库内容而言),是否有办法将敏感数据放在不同的位置并从那里获取(如将其保存在不同目录的文件中并阅读它来自那个文件,例如)?我的脚本是用Perl btw编写的.

security perl webserver cgi cgi-bin

6
推荐指数
1
解决办法
1420
查看次数

使用C/CGI管理会话

我正在寻找用C和CGI编写一些应用程序,现在我已经实现了URI编码/解码,HTML实体编码/解码,查询/ cookie解析器等基本功能.我需要管理会话.我该怎么做?例如,PHP如何管理会话?

c cgi

6
推荐指数
2
解决办法
1868
查看次数

在Perl中,如何在命令行上发送CGI参数?

通常我从网页获取数据但我想从命令行发送它以方便调试.

为了得到数据,我做了类似的事情:

my $query = new CGI;
my $username = $query->param("the_username");
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用:

$ ./script.pl the_username=user1

编辑:

实际上以上的作品.if检查的语句$username是错误的(使用==而不是eq).

parameters perl cgi command-line-arguments

6
推荐指数
2
解决办法
2万
查看次数

分析超时的Perl CGI脚本

我有一个Perl CGI应用程序,有时超时,导致它被Apache杀死,并将504 Gateway Time-out错误发送到浏览器.我试图使用NYTProf来描述这个应用程序,但我无法读取配置文件数据:

 $ nytprofhtml -f www/cgi-local/nytprof.out
Reading www/cgi-local/nytprof.out
Profile data incomplete, inflate error -5 ((null)) at end of input file, perhaps the process didn't exit cleanly or the file has been truncated  (refer to TROUBLESHOOTING in the documentation)
Run Code Online (Sandbox Code Playgroud)

我正在使用sigexit=1NYTProf选项.这是重现问题的最小CGI脚本:

#!/usr/bin/perl -d:NYTProf

sleep 1 while 1;
Run Code Online (Sandbox Code Playgroud)

perl cgi http-status-code-504 devel-nytprof

6
推荐指数
1
解决办法
536
查看次数

脚本头的过早结束python cgi脚本中的错误

我遇到了一个问题,我最近搬到了一个vps.我正在尝试运行python cgi脚本,但我得到一个apache脚本标头的过早结束错误.

(我chmod + x脚本文件)

该脚本非常简单:

#!/usr/bin/env python                                      
import cgi, cgitb
cgitb.enable()

print "Content-type: text/html"
print "<html><body>hello scritp</body></html>"
Run Code Online (Sandbox Code Playgroud)

现在如果我将脚本命名为test**.py**它在服务器上运行良好.但是,如果我以正确的方式执行,请将其称为测试**.cgi**我收到内部服务器错误.

我从终端运行脚本

./test.cgi
Run Code Online (Sandbox Code Playgroud)

我没有错

 Content-type: text/html
 <html><body>hello scritp</body></html>
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这个问题?并为它的解决方案?:)干杯

python apache cgi

6
推荐指数
1
解决办法
8948
查看次数

在调用CGI脚本时,未知用户代理在几秒钟后在Chrome和Firefox中生成重复的GET请求

当我使用Chrome或Firefox调用CGI脚本(GET请求)时,我注意到在Apache访问日志中,在几秒钟之后,生成了HEAD请求和具有相同URI的GET请求.为了确保它不是我的Apache设置的特性,我写了一个简单的Perl脚本并将其安装在我的ISP网站上.每次调用时间,URI,用户代理,远程地址和端口时,此脚本只会自己记录到磁盘文件:

#!/usr/bin/perl -wT
use strict;
use CGI;

my $cgi = new CGI;
print $cgi->header(-type=>'text/plain', -expires=>'-1d');
print "hello";

open (LOG, ">>printenv2.txt");
my ($sec, $min, $hr, $day, $mon, $year) = localtime;
my $timestamp = sprintf("%02d/%02d/%04d %02d:%02d:%02d", $mon + 1, $day, 1900 + $year, $hr, $min, $sec);
print LOG $timestamp, "\n";
my @keys = qw(REQUEST_METHOD REQUEST_URI HTTP_USER_AGENT REMOTE_ADDR REMOTE_PORT);
foreach (@keys) {
    print LOG "$_ = $ENV{$_}\n";
}
print LOG "\n";
close LOG;
Run Code Online (Sandbox Code Playgroud)

我用http://localhost/friends/forms/cgi/printenv2.cgi调用了一次脚本?arg = 1

该脚本运行了三次,但最后两次运行在我的初始调用后超过14秒.这是日志的输出:

09/11/2015 19:25:26
REQUEST_METHOD …
Run Code Online (Sandbox Code Playgroud)

firefox cgi google-chrome

6
推荐指数
1
解决办法
1228
查看次数