我编写了一个CGI脚本,使用GET数据动态创建图像.要在我的网页中包含此图片,我使用以下代码:
<img src="image.py?text=xxxxxxxxxxxxxx">
Run Code Online (Sandbox Code Playgroud)
问题是我希望将来"text"字段会变得很长,而且URL会变得太大.从谷歌搜索周围似乎没有固定的URL长度限制(即取决于浏览器,服务器,代理等)有没有更好的方法来做到这一点?
如果它很重要,我正在使用Django和Python,我不能使用任何客户端脚本(即JavaScript).
干杯,本
我拥有一个编写为CGI的遗留python应用程序.到目前为止,这可以正常工作,但并发用户的数量将在不久的将来大幅增加.在这里,我读到:"CGI非常适合低流量网站,但它有其他任何性能问题".我知道以另一种方式开始会更好,但CGI就是现在的样子.
有人能指出我如何保持CGI表现的方向,而不必重写所有代码?
如何在Perl中编写Web应用程序,以便它可以作为普通的CGI脚本,FastCGI/FCGI脚本和mod_perl/ mod_perl2(最好只使用核心Perl模块和来自libwww-Perl的模块),并最大限度地减少Perl CPAN模块的数量必须安装)?我想尽量减少将脚本从使用CGI更改为使用FastCGI或mod_perl的脚本所需做的更改.
进一步的约束:如果可能的话,我想在单个文件中记录Web应用程序,而不是像目前那样将它拆分为模块.
有问题的网络应用程序是gitweb,Git web界面,如果重要的话.
在向我们的网站perl脚本提交表单时,我遇到了mod_rewrite的问题.如果有人在带有url的页面上执行GET请求http://www.example.com/us/florida/page-title,我会使用以下重写规则重写该命令,该规则可正常工作:
RewriteRule ^us/(.*)/(.*)$ /cgi-bin/script.pl?action=Display&state=$1&page=$2 [NC,L,QSA]
现在,如果该页面上有一个表单,我想对同一个URL进行表单发布,并让Mod Rewrite使用相同的重写规则来调用相同的脚本并调用相同的操作.但是,正在发生的是重写规则被触发,正在调用正确的脚本并且正在发布所有表单POST变量,但是,重写的参数(此示例中的操作,状态和页面)未被传递给Perl脚本.我正在使用相同的Perl代码访问这些变量以获取GET和POST请求:
use CGI;
$query = new CGI;
$action = $query->param('action');
$state = $query->param('state');
$page = $query->param('page');
Run Code Online (Sandbox Code Playgroud)
我包括了QSA标志,因为我认为可以解决问题,但事实并非如此.如果我直接对脚本URL进行POST,那么一切正常.我很感激任何帮助,找出为什么目前没有这个工作.提前致谢!
我一直在教自己python和cgi脚本,我知道你的基本脚本看起来像
#!/usr/local/bin/python
import cgi
print "Content-type: text/html"
print
print "<HTML>"
print "<BODY>"
print "HELLO WORLD!"
print "</BODY>"
print "</HTML>"
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我有一个大的HTML文件,我想在python中显示(它有代码行和代码行,并且里面有JS)我是否必须在每行前面手动添加'print'并将其转换为"等?或者是否有可以为我转换它的方法或脚本?
谢谢!
试图在FastCGI下运行旧的CGI脚本.没有额外参数的打印可提供正确的输print $q->div( $q->param("text") )
但是当使用CGI方法的额外参数哈希打印出来时print $q->div( {-id=>"id"}, $q->param("text") ),它会破坏UTF-8形成的数据('õäöüžš' - >'ÃμÃÃÃÃÃÃÃüüžš
它只发生在CGI参数中,在脚本定义的变量中工作正常(例3和4).在普通的CGI(带有"-utf8"-flag)下,一切都很完美.
被称为FastCGI的示例脚本test.fcgi?text=õäöüžš应该给出四个相等的块:
#!/usr/bin/perl -w --
use strict;
use CGI::Fast qw(:all);
use locale;
use utf8;
BEGIN {
binmode(STDIN); # Form data
binmode(STDOUT, ':encoding(UTF-8)'); # HTML
binmode(STDERR, ':encoding(UTF-8)'); # Error messages
}
my ($q) = ();
my $test = "õäöüžš";
while ($q = new CGI::Fast) {
print $q->header(-type=>"text/html", -charset=>"utf-8"),
$q->start_html(-encoding=>"utf-8");
print "1: ",
$q->div( $q->param('text') ),
"<br />",
"2: ",
$q->div( {-id=>"id"}, $q->param('text') ),
"<br />", …Run Code Online (Sandbox Code Playgroud) 我正在改变现有解决方案中的一些Perl脚本.由于升级(Windows)服务器时发生了一些变化,我将它们从运行ISAPI切换到CGI.这意味着我现在必须手动发送Content-Type,否则它将失败.
所以我需要启用输出缓冲(print语句,所以STDOUT),发送Content-Type:text/html,但是在它是重定向的情况下我需要清除输出缓冲区并发送新的标题.
我怎么做?
或者还有另一种方式吗?请注意,该脚本已print用于输出HTML,我无法更改.(它写于90年代初期.)
select(STDOUT);
$| = 0;
print "Content-Type: text/html\n\n";
# somehow clear output
print "Location: login.pl\n\n";
Run Code Online (Sandbox Code Playgroud) 我有Plesk服务器,其中PHP作为CGI运行.
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
Run Code Online (Sandbox Code Playgroud)
上面的脚本应该提示用户名和密码.(是的)输入任何用户/通行证后,应打印出来.(不,它总是要求用户/通行证)
怎么解决?
如何删除临时文件夹中只有.jpg扩展名的文件.
这是我试过的;
unlink("../httpdocs/Temp/*.jpg);
Run Code Online (Sandbox Code Playgroud) 我正在用perl编写一个CGI脚本.如何检查IP地址(例如124.21.23.5)是否在100.0.0.0 - 200.79.255.255范围内?
我获取IP地址的方式是:
my $ip = $ENV{'REMOTE_ADDR'};
Run Code Online (Sandbox Code Playgroud)