标签: cgi

如何提高读取大文件并将其作为下载返回的python cgi的性能?

我有这个python cgi脚本,检查它是否从同一个IP多次访问,如果一切正常,读取一个大文件格式磁盘(11MB),然后将其作为下载返回.

它有效,但性能很糟糕.瓶颈似乎是一遍又一遍地读取这个巨大的文件:

def download_demo():
    """
    Returns the demo file
    """

    file = open(FILENAME, 'r')
    buff = file.read()

    print "Content-Type:application/x-download\nContent-Disposition:attachment;filename=%s\nContent-Length:%s\n\n%s" %    (os.path.split(FILENAME)[-1], len(buff), buff)
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它更快?我想过使用ram磁盘来保存文件,但必须有一些更好的解决方案.使用mod_wsgi而不是cgi脚本帮助?我能将大文件保存在apache的内存空间吗?

任何帮助是极大的赞赏.

python performance cgi mod-wsgi

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

为什么我的系统调用另一个CGI脚本在命令行上运行,但在作为CGI程序运行时却不行?

我有一个调用scriptB.cgi的scriptA.cgi.

scriptB.cgi需要一个参数.

我在scriptA.cgi里面都尝试过,我试过了:

`perl -l scriptB.cgi foo="toast is good" `;
Run Code Online (Sandbox Code Playgroud)

以及

@args = ("perl", "-l", "scriptB.cgi", "foo=\"toast is good\"");
system(@args);
Run Code Online (Sandbox Code Playgroud)

当我从命令行调用scriptA.cgi时,它按预期工作.但是当我通过浏览器调用scriptA.cgi时,脚本执行了.执行但是它无法读取传入的参数并将foo打印为空.

是否有一种不那么丑陋的方式从另一个调用一个cgi并传入params?

scriptB不一定是cgi,如果使用直接的.pl和args更容易做到这一点,我也很乐意这样做......但是arg必须是带空格的带引号的字符串.

欢迎所有的想法.

perl cgi

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

通过URL将CGI参数传递给表单

我试图通过URL 将参数传递给这个CGI表单(http://www.westegg.com/inflation/),所以我不必手动输入它们,这样我就可以通过其他方式生成URL为了更快的使用.

以下是该网站的CGI表单代码:

<form action="infl.cgi" method="post">

Enter the amount of money: <input name="money" type="text" size="9">

<p>

Enter the initial year (1800-2008): 
<input name="first" type="text" size="4" maxlength="4">

<p>

Enter the final year (1800-2008):
<input name="final" type="text" size="4" maxlength="4" value="2007">

<p>
<center>

    <input type="submit" value="Submit">
</center>
</form>
Run Code Online (Sandbox Code Playgroud)

我试过通过"?"传递参数 和"&"语法,但这些都不起作用:

http://www.westegg.com/inflation/infl.cgi?money=1&first=1800&last=1900
http://www.westegg.com/inflation/infl.cgi?money="1.00"&first="1800"&last="1900"
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助 :)

url cgi

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

Python urllib.request和utf8解码问题

我正在编写一个简单的Python CGI脚本来抓取网页并在Web浏览器中显示HTML文件(就像代理一样).这是脚本:

#!/usr/bin/env python3.0

import urllib.request

site = "http://reddit.com/"
site = urllib.request.urlopen(site)
site = site.read()
site = site.decode('utf8')

print("Content-type: text/html\n\n")
print(site)
Run Code Online (Sandbox Code Playgroud)

从命令行运行时,此脚本可以正常工作,但是当它通过Web浏览器查看时,它会显示一个空白页面.这是我在Apache的error_log中得到的错误:

Traceback (most recent call last):
  File "/home/public/projects/proxy/script.cgi", line 11, in <module>
    print(site)
  File "/usr/local/lib/python3.0/io.py", line 1491, in write
    b = encoder.encode(s)
  File "/usr/local/lib/python3.0/encodings/ascii.py", line 22, in encode
    return codecs.ascii_encode(input, self.errors)[0]
UnicodeEncodeError: 'ascii' codec can't encode character '\u2019' in position 33777: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

python unicode cgi apache2 unicode-string

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

将动态内容"插入"现有静态站点的最佳方式

我的一个朋友有一个静态网站.她想添加一个允许人们注册课程的注册表.使用ROR或Wordpress等重新创建网站不在范围内.我们还希望用户使用相同的域,无论他或她是在查看静态页面还是动态页面.

我可以想到用CGI做这个最不具侵入性的方法,最好是使用Ruby.但是,我真的不喜欢编写CGI代码,而且我更喜欢使用Sinatra和ROR等框架.

在这种情况下,是否真的可以使用高级框架?如果是这样,那么它是否比它的价值更麻烦?

提前致谢!

ruby cgi ruby-on-rails sinatra

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

CGI/Perl"使用"功能

use API;
use Database;
use Routines;
use Encode qw/encode decode/;
use CGI;
use CGI::Carp;
use File::Basename;
Run Code Online (Sandbox Code Playgroud)
  1. 我怎么知道那些模块来自哪里?
  2. 我应该下载什么样的文档才能在这些模块中看到这些功能的实现?

伙计们,先谢谢你们.大声笑

perl cgi

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

如何在OSX上覆盖httpd.conf中的@INC设置

如何设置Perl在OSX上的Apache httpd.conf文件中查找模块的位置?

我通过CPAN安装了几个模块,这些模块已成功安装

/opt/local/lib/perl5/site_perl/5.8.9
Run Code Online (Sandbox Code Playgroud)

我可以通过验证 perldoc perllocal

如果我perl -V在命令行上运行,我得到(以及其他目录):

@INC:
  /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level
  /opt/local/lib/perl5/site_perl/5.8.9
Run Code Online (Sandbox Code Playgroud)

但是,当我通过Apache运行perl脚本作为CGI时,我得到的错误是我use找不到的模块.@INC中包含的目录列表与我的本地perl配置不匹配.

[error] [client 127.0.0.1] Can't locate Spreadsheet/ParseExcel.pm in @INC (
 @INC contains: 
     /Library/Perl/Updates/5.8.8 
     /System/Library/Perl/5.8.8/darwin-thread-multi-2level 
     /System/Library/Perl/5.8.8 
     /Library/Perl/5.8.8/darwin-thread-multi-2level 
     /Library/Perl/5.8.8 
     /Library/Perl 
     /Network/Library/Perl/5.8.8/darwin-thread-multi-2level 
     ...
Run Code Online (Sandbox Code Playgroud)

在OSX上运行perl作为CGI时@INC如何设置 - 以及如何覆盖它?

apache perl configuration cgi

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

以不同的用户身份运行cgi脚本

我有一个用perl编写的工具,供我公司的不同用户使用.每个用户都有自己的磁盘空间,并在磁盘空间中运行该工具.这没有任何问题,工作正常.下一步,我想通过Web启用该工具并创建一个Web应用程序,用户可以通过该应用程序运行此工具,我遇到的问题是,该工具始终作为单个用户运行.我通过身份验证知道用户名,有没有办法以运行Web应用程序的用户身份运行该工具?

linux apache perl cgi

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

如何编辑@INC条目以包含模块的新目录

我想知道如何在我的perl设置中添加一个新目录,以便搜索要包含的模块?

当我运行这一行时:

perl -w /var/www/cgi-bin/upload.cgi
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Can't locate config.pm in @INC (@INC contains: . /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8) at /var/www/cgi-bin/upload.cgi line 5.
BEGIN failed--compilation aborted at /var/www/cgi-bin/upload.cgi line 5.
Run Code Online (Sandbox Code Playgroud)

我搜索了Google,显然我应该将其/var/www/cgi-bin作为文件夹包含在内,以便Perl可以找到并包含它.

更多信息

以下是该计划的前几行:

use strict;
use lib '.';
use XFSConfig; #this was fixed by using -I command line switch
use XUpload; # this returns as an error!!!
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use LWP::UserAgent;
Run Code Online (Sandbox Code Playgroud)

linux apache perl cgi centos

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

如何使用格式化打印在Haskell中为CGI显示UTF-8?

我有一个代码

module Main where

import Text.Printf

main = printf "%s%s" ("Content-type: text/html; charset=utf-8\n\n" :: String ) ("And ??????? ????????" :: String)
Run Code Online (Sandbox Code Playgroud)

如果我在终端执行它,我有我想要的:

Content-type: text/html; charset=utf-8

And ??????? ????????
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将其作为cgi-program执行时,我只是And(因为在这个词之后我有西里尔字符并且他们不想显示).

有没有问题,当我使用putStr $ fromStringData.ByteString.Char8Data.ByteString.UTF8,所以我不认为有一个与我LAMPP服务器有问题.我也包含AddDefaultCharset utf-8在httpd.conf中.

而我想要做的就是读取带有特殊符号的模板文件%s,%d等等,然后在帮助下printf,根据查询字符串和显示,将它们(符号)替换为我需要的符号.

我这样做只是为了好玩,我希望这个问题只用纯Haskell解决.

printf haskell cgi utf-8

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