我的印象是,可以将任何旧的可执行程序放在cgi-binApache目录中,并将其用作CGI脚本。具体来说,如果我有C#程序
static class TestProg
{
static void Main(string[] args)
{
Console.Write("Content-type: text/plain\r\n\r\n");
Console.WriteLine("Arguments:");
foreach (string arg in args)
Console.WriteLine(arg);
}
}
Run Code Online (Sandbox Code Playgroud)
然后转到,http://example.com/cgi-bin/TestProg?hello=kitty&goodbye=world然后将查询字符串hello=kitty&goodbye=world作为第一个参数传递给main,因此我的页面应如下所示
Arguments:
hello=kitty&goodbye=world
Run Code Online (Sandbox Code Playgroud)
不幸的是,我的查询参数都没有传递。页面加载并且仅打印而后Arguments:没有任何内容。
那么如何将查询参数传递给该程序?
我创建了一个简单的 HTML,其中包含以下表单:
<form action="WEB-INF/cgi/run.pl" method="post">
<table border="0" cellspacing="0">
<tbody>
<tr><th align="center" bgcolor="F7F5F2"> <p class="normal">Submission Form</p> </th></tr>
<tr><td align="center" bgcolor="F7F5F2"> <p class="normal">Insert your text below:</p> </td></tr>
<tr><td><textarea wrap="virtual" name="seq_data" rows="15" cols="80"></textarea></td></tr>
</tbody></table>
or upload a file : <input type="file" name="file" size="29" border="0"><br><br>
<input class="normalc" value="Submit Query" type="submit">
<input class="normalc" value="Clear Form" type="reset"><p></p>
</form>
Run Code Online (Sandbox Code Playgroud)
我需要将表单中的数据作为输入传递给 perl 脚本 (run.pl)。
在搜索互联网时,我读到:1)我需要通过 apache tomcat 测试我的网站。我已经安装了 apache 7.0 版,并通过删除此 servlet 周围的 XML 注释来修改 Tomcat 7.0/conf/web.xml 文件:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value> …Run Code Online (Sandbox Code Playgroud) 为什么cgi脚本必须保留在cgi-bin文件夹中?
与public_html文件夹和cgi-bin文件夹中的插入python脚本(或php脚本或任何其他脚本)有什么区别?
我不明白: -
我在http://www.optimalthinking.com/community/wp-admin/install.php上安装了wordpress Mu
但是当我访问http://www.optimalthinking.com/community/时
我懂了
安全警报!无法直接访问PHP CGI。
此PHP CGI二进制文件是在启用force-cgi-redirect的情况下编译的。这意味着仅在设置了REDIRECT_STATUS CGI变量(例如,通过Apache Action指令)的情况下,才能提供页面。
有关为什么存在此行为的更多信息,请参见CGI安全手册页。
有关更改此行为或重新启用此Web服务器的更多信息,请查阅此发行版随附的安装文件,或访问手册页。
谁能告诉我问题出在哪里以及如何解决。
到目前为止我尝试过的事情:
所有这些事情没有产生任何结果。如果stackoverflow允许我,我将奖励任何会解决此问题的人。
谢谢
我收到了一个对无效 URL 的非常奇怪的请求:
Invalid URL: /cgi-bin/1st.cgi
Run Code Online (Sandbox Code Playgroud)
这导致以下错误:
SEVERE: Exception initializing page context
java.lang.IllegalStateException: Cannot create a session after the response has been committed
at org.apache.catalina.connector.Request.doGetSession(Request.java:2381)
at org.apache.catalina.connector.Request.getSession(Request.java:2098)
at org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:833)
at javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:216)
at org.apache.catalina.core.ApplicationHttpRequest.getSession(ApplicationHttpRequest.java:544)
...
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我从命令行执行.cgi(作为有权访问数据库的用户)
install_driver(Pg)失败:无法在@INC中找到DBD/Pg.pm(@INC包含:/ Library/Perl/5.12/darwin-thread-multi-2level /Library/Perl/5.12/Network/Library/Perl/5.12/darwin-thread-multi-2level /Network/Library/Perl/5.12 /Library/Perl/Updates/5.12.4 /System/Library/Perl/5.12/darwin-thread-multi-2level/System/Library/Perl/5.12 /System/Library/Perl/Extras/5.12/darwin-thread-multi-2level /System/Library/Perl/Extras/5.12.)at(eval 4)3行.也许DBD :: Pg perl模块还没有已完全安装,或者'Pg'的大写不正确.
cpan -D DBD :: Pg显示
DBD :: PG
用于DBI的Postgres驱动程序T/TU/TURNSTEP/DBD-Pg-2.19.2.tar.gz /opt/local/lib/perl5/site_perl/5.12.4/darwin-thread-multi-2level/DBD/Pg.pm已安装:2.19.2 CPAN:2.19.2最新DBD :: Pg开发人员(DBDPG)dbd-pg@perl.org
尝试通过PERL5LIB或PERLLIB导出上述路径没有不同的结果.
.cgi引用/ usr/bin/perl,它告诉我们
这是为darwin-thread-multi-2level构建的perl 5,版本12,subversion 4(v5.12.4)(有2个已注册的补丁,有关详细信息,请参阅perl -V)
我喜欢永久地将模块路径设置为安装DBD :: Pg的路径(/ opt/...).我想知道为什么错误输出目录列表没有提到.
我通过cpanm安装了DBD :: Pg.
我使用的是Mac OS X Mountain Lion.
有人可以向我解释让perl在服务器上工作的基本知识.我需要服务器上的模块吗?如果是这样的话呢?我如何命名我的文件以及它们去了哪里?
根据我的理解,你需要一个模块,它进入cgi-bin.我无法得到一个明确的答案,我是否命名文件.pl或.cgi,当我把它放在cgi-bin中时,我收到服务器错误.我也将我的权限设置为777,所以这不应该是问题.
请帮忙!我只想了解如何使基本程序正常工作,如下所示.提前致谢!
#!/usr/bin/perl
require("cgi-lib.pl");
print &PrintHeader;
print "<html>";
print "<head><title>Hello world!</title></head>";
print "<body>";
print "<p>Hello world!</p>";
print "</body>";
print "</html>";
Run Code Online (Sandbox Code Playgroud) 我收到错误"内部服务器错误.服务器遇到内部错误或配置错误,无法完成您的请求."
我在html中提交表单并获取其值.
HTML代码(index.cgi)
#!c:/perl/bin/perl.exe
print "Content-type: text/html; charset=iso-8859-1\n\n";
print "<html>";
print "<body>";
print "<form name = 'login' method = 'get' action = '/cgi-bin/login.pl'> <input type = 'text' name = 'uid'><br /><input type = 'text' name = 'pass'><br /><input type = 'submit'>";
print "</body>";
print "</html>";
Run Code Online (Sandbox Code Playgroud)
用于获取数据的Perl代码(login.pl)
#!c:/perl/bin/perl.exe
use CGI::Carp qw(fatalsToBrowser);
my(%frmfields);
getdata(\%frmfields);
sub getdata {
my ($buffer) = "";
if (($ENV{'REQUEST_METHOD'} eq 'GET')) {
my (%hashref) = shift;
$buffer = $ENV{'QUERY_STRING'};
foreach (split(/&/,$buffer)) {
my ($key, $value) = split(/=/, $_); …Run Code Online (Sandbox Code Playgroud) 为什么我们需要apache web服务器来运行cgi脚本?可以使用python simpleHTTPServer完成
我有一个从URL访问的perl CGI脚本。我已经使用检查过语法perl -wc,似乎还可以。但是,用于创建目录的命令均未正确执行。权限设置为755。
有谁知道如何诊断这个问题?
这是代码:
#!/usr/bin/perl
use CGI;
#-- create CGI Query
$q = CGI->new;
$prefix = "X__";
print "Content-type: text/html\n\n";
#-- get companyID
$entityID = $q->param('entityID');
#-- get directory name
$dir = "${prefix}${entityID}";
#-- change directory
chdir("/var/www/html/web/customers");
#-- create parent company directory
`sudo mkdir -m 755 $dir`;
print "${entityID}";
Run Code Online (Sandbox Code Playgroud)