我有以下最简单的 Perl CGI 脚本:
use strict;
use warnings;
use CGI();
use CGI::Carp qw(fatalsToBrowser);
use Template;
print CGI::header();
foreach(@INC) {
print "$_\n";
}
Run Code Online (Sandbox Code Playgroud)
当调用 ( http://[..]/cgi-bin/p.cgi ) 时,出现以下错误:
Can't locate Template.pm in @INC (@INC contains: /usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib/perl5/5.8.8/i386-linux-thread-multi /usr/lib/perl5/5.8.8 .) at /home/pistacchio/webapps/htdocs/cgi-bin/p.cgi line 8.
BEGIN failed--compilation aborted at /home/pistacchio/webapps/htdocs/cgi-bin/p.cgi line 8.
Run Code Online (Sandbox Code Playgroud)
我确保安装了模板,并且确实在从 shell 运行此程序时它可以工作(加载模板)并输出:
Content-Type: text/html; charset=ISO-8859-1
/home/pistacchio/lib/perl5
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
/home/pistacchio/lib/perl5/lib
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/site_perl/5.8.8
/usr/lib/perl5/site_perl
/usr/lib/perl5/vendor_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/vendor_perl/5.8.8
/usr/lib/perl5/vendor_perl
/usr/lib/perl5/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/5.8.8
Run Code Online (Sandbox Code Playgroud)
模板安装在 /home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[pistacchio@web118 i386-linux-thread-multi]$ pwd
/home/pistacchio/lib/perl5/lib/i386-linux-thread-multi
[pistacchio@web118 i386-linux-thread-multi]$ …Run Code Online (Sandbox Code Playgroud) 我正在编写一个函数,该函数将列出传递给 CGI 脚本的所有参数,无论是通过 POST 发送的表单、URL 字符串,还是两者。
为此有两个功能:
param():尽管文档,我发现这个阅读无论是POST方法的参数从一种形式或网址参数仅如果没有post数据。
另一方面,url_param()将永远只读取通过 URL 字符串传入的参数,而不管 POST。
我的功能
sub post_and_url_param_keys{
if(url_param){
return [url_param, param];
}else{
return [param];
}
Run Code Online (Sandbox Code Playgroud)
如果传入,它可以列出所有参数:
? POST 和 URL 参数
? 仅 POST 参数
仅X URL 参数(每个键列出两次)
有没有办法巧妙地解决这个问题,而不必检查每个参数对的名称和值是否有重复?
我被要求制作一个表格,通过使用CGI.pm和来自用户的表格获得宽度,单位,方向和段落.然后我需要通过CSS规则将宽度,单位和方向应用于段落.
我想知道是否可以使用Perl编写内联CSS CGI.pm.
例如:
<p style=width:"user-width user-unit";text-align:"user-justification">
paragraph</p>
Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的 macbook(Yosemite 10.9.3)上安装 php-cgi,因为当我尝试在浏览器中打开内容时,PhpStorm IDE 不断向我回复“找不到 php-cgi”。我尝试使用较新版本的 php 解释器,因为当前版本是 5.4。但是我只能在 php.net 站点中找到这些包,但我不知道如何安装它。我也尝试下载自制软件,但又不知道如何从那里开始。我尝试使用 MacPort 通过使用以下行来安装 fastcgi:sudo port install php5 +fastcgi
但它返回这个:
---> Dependencies to be installed: autoconf213 gawk gettext expat libiconv ncurses readline m4 perl5 perl5.16 gdbm bzip2 gsed libtool libxml2 xz zlib mhash pcre libedit pkgconfig
---> Fetching archive for expat
---> Attempting to fetch expat-2.1.0_0.darwin_13.x86_64.tbz2 from http://packages.macports.org/expat
---> Attempting to fetch expat-2.1.0_0.darwin_13.x86_64.tbz2.rmd160 from http://packages.macports.org/expat
---> Installing expat @2.1.0_0
---> Activating expat @2.1.0_0
Error: org.macports.activate for port expat returned: Image …Run Code Online (Sandbox Code Playgroud) 我正在编写一组打算在Web上使用的Python脚本。目前,我有一些使用的测试脚本可以正常工作import cgi。
我基本上想要FastCGI / WSGI的行为。在这种情况下,我可以将特定URL下的所有请求传递给脚本。例如,假设用户访问URL http://www.example.com/script/run/1?param=true。对于/script我想要的给定脚本,例如/opt/mypython/webscript.py使用的任何请求import cgi,都可以运行并接收URL和GET参数。在这种情况下,我希望从脚本中能够看到包含一个参数/run/1和GET参数字典。
出于安全考虑,理想情况下,我们希望脚本位于文档根目录之外。
我还希望能够x-sendfile从脚本中使用标头。我知道FastCGI模块支持此功能,但不确定标准CGI是否支持。
我愿意迁移到FastCGI,但我不想重构任何代码。另外,我想在开发过程中使用标准的CGI,因为我调查的唯一FastCGI实现(波动)将导致脚本被缓存,因此在每次更改代码时都必须完全重新启动整个Web服务器。另外,flup要求您使用CGI接口进行一些不同的工作,这将意味着重写一些主要的代码。
flup确实提供了一些不错的便利;它的environ变量提供了一个PATH_INFO参数,用于指定如上所述的子路径。但是同样,标准的CGI模块并不能提供所有这些便利,因此flup需要重新编写代码,并且在开发过程中频繁更改代码的效率非常低。
因此,理想的解决方案是既使用标准CGI,又使用FastCGI来完成此任务,而无需重新编写代码。因此,在开发过程中,我可以使用标准的CGI及其伴随的性能下降(事实是python解释器必须每次启动),然后在代码准备好用于生产时轻松地将其迁移到基于FastCGI的后端,以便可以以最高性能运行。
我正在使用lighttpd的当前版本。如果可能的话,我需要做什么来配置lighttpd?
我想我犯了一些愚蠢的错误,但我找不到它。试图在 apache 网络服务器上运行一个简单的 python cgi 脚本。我的代码是
#/usr/bin/env python
import cgitb
import cgi
cgitb.enable()
print 'Content-Type: text/html'
print
print '<html>'
print '<head><title>My first Python CGI app</title></head>'
print ' <body>'
print ' <p>something to try<p>'
print ' </body>'
print '</html>'
Run Code Online (Sandbox Code Playgroud)
这段代码在 /usr/lib/cgi-bin 我试图通过 localhost/cgi-bin/test.py 运行它,但它显示500 INTERNAL SERVER ERROR。我尝试更改其权限,但什么也没发生。我能够从 /var/www/html/file_name.html 运行 html 文件所以我尝试在 www/ 和 www/html/(两者中)移动它并制作 cgi-bin 文件夹,没有它,没有解决。
我在 apache2.conf 中添加了这个
<Directory /usr/lib/cgi-bin>
Options +ExecCGI
AddHandler cgi-script .cgi .py
Order allow,deny
Allow from all
</Directory>
Run Code Online (Sandbox Code Playgroud)
和 var/log/apache2/error.log 说
[Tue Jan 13 …
我正在使用 cgi 包在 python 中编写脚本。我需要 根据我的代码中的一些检查发送HTTP/1.1 200 OK\n 或 HTTP/1.1 404 Not Found\n的响应。如果我将上述行之一打印为响应的第一行,我的 apache 服务器会记录错误并返回 500 Internal server error 在这种情况下记录的错误消息的相关部分是来自脚本“helo.py”的格式错误的 标头:Bad标头:HTTP/1.1 200 OK\n 谁能指导我我在这里做错了什么。
我发现在创建HTML页面时不再推荐使用CGI,但是我搜索关于CGI适当使用的答案的答案引起了比答案更多的混乱.
如果我的问题是基本的,我道歉,但我希望我的问题的答案将有助于澄清一些事情.
我被告知不要创建这样的表单:
sub output_form {
my ($q) = @_;
print $q->start_form(
-name => 'main',
-method => 'POST',
);
print $q->start_table;
print $q->Tr(
$q->td('Update#:'),
$q->td(
$q->textfield(-name => "update_num", -size => 02)
)
);
print $q->Tr(
$q->td('Date:'),
$q->td(
$q->textfield(-name => "date",-id => "datepicker")
)
);
print $q->Tr(
$q->td('Location:'),
$q->td(
$q->textfield(-name => "location", -size => 50)
)
);
print $q->Tr(
$q->td('Queue:'),
$q->td(
$q->textfield(-name => "queue", -size => 50)
)
);
print $q->Tr(
$q->td('ETO:'),
$q->td(
$q->textfield(-name => "eto", -size => 50) …Run Code Online (Sandbox Code Playgroud) 我不知道问题出在哪里,在成功设置 Bugzilla 并登录后,当我单击管理之类的任何链接时,它返回此错误消息:
Server error!
The server encountered an internal error and was unable to complete your request.
Error message:
couldn't create child process: 720002: admin.cgi
If you think this is a server error, please contact the webmaster.
Error 500
localhost
Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/7.0.13
Run Code Online (Sandbox Code Playgroud)
我检查了 Apache 错误日志并得到了这个:
[Mon Feb 13 13:10:21.339205 2017] [ssl:warn] [pid 9152:tid 500] AH01909: www.example.com:443:0 server certificate does NOT include an ID which matches the server name
[Mon Feb 13 13:10:21.448624 2017] [core:warn] [pid 9152:tid 500] …Run Code Online (Sandbox Code Playgroud) 我的 IIS 服务器上托管了一个 ColdFusion 应用程序。我将Shibboleth服务添加到我的 Web IIS,并设置了 CGI/过滤器以使用它。我将我的应用程序添加到testshib联盟并且能够成功登录。现在我正在尝试将会话变量放入 ColdFusion 代码中。
当我转储 CGI 范围时,我看到 shibboleth 会话保存在 下HTTP_COOKIE,但它REMOTE_USER是一个空字符串。这是因为REMOTE_USER不能根据docs 使用。相反,请求标头变量应该命名为HTTP_REMOTE_USER,但我在 CGI 转储中没有看到。有没有人这是为什么?我是否必须设置我的 shibboleth 属性映射或在 ColdFusion 中?
索引.cfm
CGI dUMP
<cfdump var = "#cgi#" >
<br>HTTP_REMOTE_USER
<cfdump var="#CGI.HTTP_REMOTE_USER#">
<br>Get Request
<cfset x = GetHttpRequestData()>
<cfdump var="x">
Run Code Online (Sandbox Code Playgroud)
转储结果
HTTP_COOKIE:_shibsession_64656487474733a2f2f6465736f6d2f73686962626f6c657468=_ecb60f7e4bf7616ab3522;
Run Code Online (Sandbox Code Playgroud)
会议
Miscellaneous
Session Expiration (barring inactivity): 479 minute(s)
Client Address: 224.61.30.228
SSO Protocol: urn:oasis:names:tc:SAML:2.0:protocol
Identity Provider: https://idp.testshib.org/idp/shibboleth
Authentication Time: 2017-11-30T14:48:48.255Z
Authentication Context …Run Code Online (Sandbox Code Playgroud)