标签: cgi

当浏览器重新加载/返回时,如何防止数据库再次被写入?

我正在整理一个写入数据库的小型Web应用程序(Perl CGI和MySQL).CGI脚本从表单中获取一些信息并将其写入数据库.但是,我注意到,如果我在网络浏览器上点击"重新加载"或"返回",它会再次将数据写入数据库.我不想要这个.

在这种情况下,防止重写数据的最佳方法是什么?

database perl cgi idempotent

5
推荐指数
2
解决办法
2067
查看次数

使用CGI脚本可以使用Apache捕获对域的所有请求

使用Apache 2,我想配置我的网站,以便将对该域的任何请求转发到Python CGI脚本。基本上,如果用户访问http://www.example.com,我希望执行cgi /cgi-bin/cgi.py。如果用户转到http://www.example.com/index.rss,我希望/cgi-bin/cgi.py以/index.rss作为参数执行。我尝试了ScriptAlias和Rewrite的各种组合,但似乎无法使其处于正确的关系中。

apache mod-rewrite cgi apache2

5
推荐指数
1
解决办法
5228
查看次数

Internet Explorer 8 + Deflate

我有一个非常奇怪的问题..我真的希望有人有答案,因为我不知道还有什么要问的.

我正在用C++编写一个cgi应用程序,它由Apache执行并输出HTML代码.我自己压缩HTML输出 - 从我的C++应用程序中 - 因为我的Web主机由于某种原因不支持mod_deflate.

我用Firefox 2,Firefox 3,Opera 9,Opera 10,谷歌Chrome,Safari,IE6,IE7,IE8,甚至wget测试了它.除了IE8之外,它适用于任何东西.

IE8只是说"Internet Explorer无法显示网页",没有任何信息.我知道这是因为压缩只是因为它可以工作,如果我禁用它.

你知道我做错了什么吗?

我使用zlib来压缩它,确切的代码是:

    /* Compress it */
int compressed_output_size = content.length() + (content.length() * 0.2) + 16;
char *compressed_output = (char *)Alloc(compressed_output_size);
int compressed_output_length;
Compress(compressed_output, compressed_output_size, (void *)content.c_str(), content.length(), &compressed_output_length);

/* Send the compressed header */
cout << "Content-Encoding: deflate\r\n";
cout << boost::format("Content-Length: %d\r\n") % compressed_output_length;
cgiHeaderContentType("text/html");
cout.write(compressed_output, compressed_output_length);


static void Compress(void *to, size_t to_size, void *from, size_t from_size, int *final_size)
{
int ret;
z_stream stream; …
Run Code Online (Sandbox Code Playgroud)

c++ compression apache cgi internet-explorer-8

5
推荐指数
2
解决办法
4413
查看次数

如何从Perl CGI脚本中不断通知用户进度?

我有这个Perl脚本位于我的Apache服务器的cgi-bin文件夹中:

#!/usr/bin/perl 
use strict;
use warnings;

$| = 1;

print "Content-type: text/html\r\n\r\n";
print "Hello there!<br />\nJust testing .<br />\n";

my $top = 5;
foreach (1..$top) {
    print "i = $_<br />\n";
    sleep 1;
}
Run Code Online (Sandbox Code Playgroud)

我想在这里实现的是逐步更新网页以向用户显示更新状态.然而,我实际上得到的是在延迟5秒之后的整个输出.

有什么办法可以编写一个能够不断告知用户进度的脚本吗?我有一个脚本需要很长时间才能完成,我希望能够实时看到它的进度而不是完整的脚本.

我也尝试将autoflush模式设置为off($ | = 0),但即便如此也没有做任何事情.

apache perl cgi

5
推荐指数
1
解决办法
4113
查看次数

如何从perl访问HTTP基本身份验证用户名?

我需要在我的CGI脚本中获取远程用户名.我在哪里找到的?我想在我返回的页面上显示该名称.

perl cgi basic-authentication

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

如何在没有apache的情况下运行我的perl CGI脚本?

如何在没有apache的情况下运行我的perl CGI脚本?这是出于测试目的,因此某种只处理一个请求的单进程服务器对我来说应该足够了.

perl cgi

5
推荐指数
2
解决办法
3905
查看次数

为什么Perl常用于编写CGI脚本?

我计划在我的网站上添加一个更好的搜索功能,所以我认为我会用C语言编写它并使用CGI作为访问它的方法.但就基于CGI的东西而言,Perl似乎是最受欢迎的语言.这是为什么?用C或机器代码编程是不是更快?

如果有的话,用脚本语言编写它有什么好处?

谢谢.

perl performance search cgi

5
推荐指数
3
解决办法
1943
查看次数

Apache2和CGI - 如何防止Apache缓冲POST数据?

我正在尝试在CGI中提供文件上传的实时解析,并在屏幕上显示数据.

但是,Apache2似乎想要在完全发送CGI应用程序之前等待完整的POST完成.

如何强制Apache2停止缓冲POST到我的CGI应用程序?

编辑

看起来它实际上是被缓冲的CGI的输出.我开始将数据流式传输到临时文件以观察其进度.那,我有另一个问题.

1)输出正在缓冲.我已经尝试了SetEnvIf(简称SetEnv)用于"!nogzip","nogzip"和"!gzip"但没有成功(在CGI目录定义中).

2)在CGI进程退出之前,Apache2似乎没有读取CGI的输出?我注意到我的CGI应用程序(正在刷新与否)在80K左右的"fwrite(...,stdout)"行上永久挂起.

编辑

好吧,Firefox正在搞乱我.如果我发送150K文件,那么80K左右就没有CGI锁定.如果文件是2G,则有一个锁定.因此,Firefox在尝试发送文件时没有从服务器读取输出...是否有任何标题或备用内容类型来更改该行为?

编辑

好吧,我想大文件上的CGI输出锁定实际上并不重要.我不需要回显文件!我正在调试由调试辅助工具引起的问题.:)

我想这个效果还不错.谢谢!

最后的说明

就像一个注释......我认为Apache2缓冲输入的原因是我总是得到一个"Content-Length"环境变量.我猜FireFox足够聪明,可以预先计算多部分表单上传的内容长度,而Apache2正在传递它.我认为Apache2正在缓冲输入并报告长度本身.

forms apache post cgi apache2

5
推荐指数
1
解决办法
4836
查看次数

为什么Perl的CGI :: cookie能够在IE中设置cookie,而不是Firefox?

我有一些Perl CGI代码,我试图在SourceForge帐户的项目Web空间中运行.在与IE交谈时,代码能够很好地设置浏览器cookie,但在与Firefox交谈时没有设置cookie .当我在"localhost"上使用Apache进行测试时,两个浏览器都能正常工作.它只在Firefox疯狂的远程SourceForge URL上.

搜索已经发现了几十个近乎重复的问题,但通常人们会遇到完全相反的问题!(Firefox很好,IE有问题)

这是我要求设置cookie的实用程序子:

sub setCookie {
    my $name = shift;
    my $value = shift;
    my $expires = shift;
    my $path = shift;
    my $domain = shift;
    if( !defined( $expires ) ) {
        $expires = '+4h';
    }
    if( !defined( $path ) ) {
        $path = '/';
    }
    if( !defined( $domain ) ) {
        $domain = 'steveperkins.sourceforge.net';
    }
    my $cookie = CGI::cookie(
        -name    => $name,
        -value   => $value,
        -domain   => $domain,
        -expies => $expires,
        -path …
Run Code Online (Sandbox Code Playgroud)

cookies perl cgi mason

5
推荐指数
2
解决办法
1220
查看次数

解析shell中的ps和grep输出

当我执行"ps -ef | grep port"时,我收到以下消息

apache    6215     1  0 11:20 ?        00:00:00 perl /scripts/myscript.pl -sn 4123E -sku HSME01-HW -port 8
Run Code Online (Sandbox Code Playgroud)

有没有办法解析以下内容:

  • 开始时间(11:20)
  • sn(4123E)
  • sku(HSME01-HW)
  • 港口(8)

linux bash shell grep cgi

5
推荐指数
1
解决办法
8560
查看次数