我正在使用CGI来允许用户上传一些文件.我只是希望能够上传.txt或.csv文件.如果用户上传任何其他格式的文件,那么我希望能够发出错误消息.
我看到这可以通过javascript完成:http://www.codestore.net/store.nsf/unid/DOMM-4Q8H9E
但有没有更好的方法来实现这一目标?Perl中是否有一些功能允许这样做?
我真的不知道如何运行Perl文件.我已将我的.pl上传到cgi-bin然后chmod到755.然后,当我去运行该文件时,我只得到500内部服务器错误.
**/cgi-bin/helloworld.pl**
#!/usr/bin/perl
print 'hello world';
Run Code Online (Sandbox Code Playgroud)
关于我做错了什么的任何想法?
我将一个基本的python脚本上传到Dreamhost的共享主机,并将权限更改为777.它从shell(通过SSH)运行良好,但从浏览器调用时会显示"服务器错误".
在error.log中,错误是'Premature end of script headers'.
我写信给DreamHost,他通过更改权限来回复(令人惊讶的是很快)755,并且脚本在apache中开始正常工作(我可以在浏览器中看到输出).
但这似乎不对 - 如何添加额外的宽松权限可以打破任何功能?
我正在使用html :: template构建一个perl cgi :: application.
我正在使用具有相同布局的7-8个不同模板 - 页眉,页脚,左列等.如何将这个html从模板文件中分离到单个布局文件中.除了cgi :: app和html :: template之外,我还需要什么perl模块.
谢谢
我正在尝试从在单独的PHP脚本中创建的会话中实例化CGI :: Session对象; 但是,当我Dumper()对象时,我看到_CLAIMED_ID会话ID(与PHP的session_id()匹配)与_DATA成员中存储的_SESS_ID(或其他)不同; 更重要的是,_DATA成员没有我在PHP中注册的任何会话变量.
然而!当我使用PHP :: Session(并将相同的sess id传递给它的构造函数)时,这个对象确实找到了有问题的会话变量.
理想情况下,我想使用CGI :: Session,因为它看起来更健壮,PHP :: Session似乎更具特定任务,所以有人可以建议我在CGI :: Session出错了吗?(我应该创建一个PHP :: Session然后尝试将其传递给CGI :: Session吗?)
我正在使用Perl CGI模块.如果我有像这样的HTML
<select multiple name="FILTER_SITE">
<option>1</option>
<option>2</option>
</select>
Run Code Online (Sandbox Code Playgroud)
并提交我的表格我可以在URL中得到这样的内容:
[..] FILTER_SITE=1&FILTER_SITE=2
Perl将my $FILTER_SITE = $cgi->param('FILTER_SITE');仅捕获第一个实例.
如何使用两者(在这种情况下)?劈开它并自己解析引用者并将它们添加到数组是我的第一个想法,但它有点乱,然后我再也不熟悉CGI.pm或Perl.
有趣的是,使用Data :: Dumper
print "<pre>".Dumper($cgi->param('FILTER_SITE')) . "</pre>";
$VAR1 = '1';
$VAR2 = '2';
Run Code Online (Sandbox Code Playgroud) 我的apache服务器以前使用的是用perl编写的CGI脚本.我听说使用mod_perl要比使用标准的cgi脚本快得多,所以我在服务器上设置了mod_perl.根据这个页面,为了让我的CGI脚本在mod_perl下运行,我需要做的就是编辑我的httpd.conf文件.我在httpd的末尾添加了以下行:
LoadModule perl_module libexec/apache2/mod_perl.so
<Location /cgi-bin>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
Options ExecCGI
PerlSendHeader On
Order allow,deny
Allow from all
</Location>
Run Code Online (Sandbox Code Playgroud)
如果我检查
exists $ENV{"MOD_PERL"}在CGI文件中,MOD_PERL变量似乎存在.所以我很确定我已经设置并运行了mod_perl.
我的问题是:我的完全未改变的 CGI脚本是否真的经历了加速?有什么办法可以加快速度吗?或者,任何进一步的工作对于加速都不值得吗?有没有人有这种东西的经验?
我一直在寻找文档和论坛的答案,但我真的找不到任何东西.在此先感谢您的帮助!
我正在使用Bottle.py和Python,我对request.headersVS request.environ变量之间的区别感到有些困惑.我正在使用会话,request.environ当我枚举数据时,我的会话数据出现在变量中,这使我得出结论,其中一些数据不公开.
我怎么知道哪些变量是公开的,哪些变量不公开?这两个变量有什么区别?
我有两个值用于名称,另一个用于密码,如果用户输入正确的组合,我想传递给另一个页面.如果用户知道我可以通过在查询字符串中包含值来重定向,如:
$cgi->redirect('http:someotherpage.com?username=$username&password=$password');
Run Code Online (Sandbox Code Playgroud)
但是这是使用GET请求,是否有办法使用POST执行相同的操作,还是有另一种方法在Perl中重定向时传递值?我知道JSP有一个名为RequestDispatcher的方法,如果POST不可用,Perl中会出现类似的东西吗?
编辑:我之前发现了这个链接CGI Application Dispatch,但它有点技术性,所以我不知道这是否适合这项工作.
编辑:我正在使用CGI.pm
Perl版本5.8.5我有:
my @dt = qw( 1 0 );
my %dt = qw( 1 single 0 multi );
my $val = 0;
$cgi->popup_menu( {
-name => "test",
-default => $val,
-values => \@dt,
-labels => \%dt,
} )
Run Code Online (Sandbox Code Playgroud)
弹出窗口一切正常,除了"选中"永远不会设置.所以始终选择第一个val.
如果我做出改变,而改变的0〜2在所有情况下($val,@dt,和%dt)通常然后一切功能,而且我得到的HTML标签"选择".
我还把代码应用到Perl 5.8.8框中,它在那里用零工作?我是否需要让我们的系统管理员在5.8.5盒子上推出我们的Perl版本?