有一些教程告诉我如何在CGI模式下运行时覆盖PHP配置.但我仍然感到困惑,因为很多人都认为服务器是在Linux上运行的.虽然我需要做的也是在Windows上.
我的托管确实使用Linux,但我的本地开发计算机使用的是Windows XP和Xampp 1.7.3.所以我需要首先在我的本地计算机上执行此操作,然后我想更改托管服务器上的配置.
我的托管服务器中的PHP已经作为CGI运行,而在我的本地计算机中仍然作为Apache模块运行.
在这一点上,我理解的过程是:
将PHP更改为在CGI模式下工作.我通过在"httpd-xampp.conf"中评论这两行来做到这一点:
# LoadFile "C:/xampp/php/php5ts.dll"
# LoadModule php5_module modules/php5apache2_2.dll
我的PHP现在作为CGI运行.我用phpinfo()检查过这个.它告诉我,Server API现在是CGI/FastCGI.现在我想覆盖php配置.
在DocumentRoot中创建"cgi-bin"目录.我的DocumentRoot位于"D:\ www \"(我正在使用带虚拟主机的apache).所以它现在是"D:\ www\cgi-bin".
将默认的"cgi-bin"目录设置从"C:/ xampp/cgi-bin /"更改为"D:\ www\cgi-bin":
ScriptAlias /cgi-bin/ "D:/www/cgi-bin/"Run Code Online (Sandbox Code Playgroud)<Directory "D:\www\cgi-bin"> Options MultiViews Indexes SymLinksIfOwnerMatch Includes ExecCGI AllowOverride All Allow from All </Directory>
将'php.ini'文件复制到"D:\ www\cgi-bin"并将upload_max_filesize设置从128M修改为10M.
在"D:\ www\cgi-bin"中创建"php.cgi"文件并将这些代码放在文件中:
#!/bin/sh
/usr/local/cpanel/cgi-sys/php5 -c /home/user/public_html/cgi-bin/
而已.我陷入了困境.所有教程告诉我创建'php.cgi'文件并将shell代码放在文件中.
如何在Windows上执行第6步?我知道下一步是在.htaccess文件中创建处理程序来加载'php.cgi'.
而且,因为我还需要在我的托管服务器(Linux)上更改PHP配置,这是上面的第6步吗?一些教程告诉我们插入这些行而不是上面的行:
#!/bin/sh
export PHPRC=/site/ini/1
exec /cgi-bin/php5.cgi
Run Code Online (Sandbox Code Playgroud)
如果我的问题不清楚,我很抱歉.我是新成员,这是我在本网站的第一个问题.
谢谢.
我正在尝试创建一个文件上传页面,它会提示用户输入文件,并在显示进度时上传.
目前我已经设法创建一个可以调用我的python脚本的简单HTML页面.然后python脚本将获取文件并以1000字节的块上传.
我有两个主要问题(主要是由于对此全新):
1)我无法获得文件大小来计算百分比2)我不知道如何在服务器端python和页面中的任何内容之间进行通信以更新进度状态;大概是javascript.
我是否会采取错误的方式?或者我的困境有解决方案吗?
这是我的python代码:
#!/usr/local/bin/python2.5
import cgi, os
import cgitb; cgitb.enable()
try:
import msvcrt
msvcrt.setmode (0, os.O_BINARY)
msvcrt.setmode (1, os.O_BINARY)
except ImportError:
pass
form = cgi.FieldStorage()
upload = form['file']
if upload.filename:
name = os.path.basename(upload.filename)
out = open('/home/oetzi/webapps/py/' + name, 'wb', 1000)
message = "The file '" + name + "' was uploaded successfully"
while True:
packet = upload.file.read(1000)
if not packet:
break
out.write(packet)
out.close()
else:
message = "Derp... could you try that again please?"
print """\
Content-Type: text/html\n …Run Code Online (Sandbox Code Playgroud) 我试图在python上运行VMS上运行一个非常简单的CGI服务器.
import sys
from BaseHTTPServer import HTTPServer
from CGIHTTPServer import CGIHTTPRequestHandler
server_address=('',8080)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是它正确地提供静态内容并且它试图执行CGI-s(它在正确的位置,我已经将这些CGI与Apache一起使用,因此该部分绝对不是问题)但它挂在某处.这是我对VMS不了解的事情.
任何指向正确方向的指针都将受到赞赏.:)
更新:简化,我需要在VMS上执行程序并以某种方式获取该程序的结果.任何对执行子进程和获取结果的引用对我来说都足够了.
当我尝试这个时:
while (my $cgi = new CGI::Fast) {
...
my $session = CGI::Session->new(undef, $cgi);
...
}
Run Code Online (Sandbox Code Playgroud)
我发现不同的客户正在进行相同的会话!什么会导致这个奇怪的会话共享?
编辑:我无法可靠地重现这一点,但在我的测试中,我看到过从浏览器中删除会话cookie,刷新页面以及(使用Firebug的Net窗格)看到我没有发送cookie的情况.请求,但在响应中使用旧会话ID 获取Set-Cookie !由于使用FastCGI,可能会在内存中出现问题?
(注意:我从这个问题的早期版本中删除了第二段代码,因为我不再确定它是否相关)
编辑:这http://osdir.com/ml/web.fastcgi.devel/2004-02/msg00007.html似乎描述了我所看到的行为
编辑: 如上面的osdir.com帖子所述,FCGI.pm包含以下代码:
for (keys %FCGI::ENV) {
$ENV{$_} = $FCGI::ENV{$_} unless exists $ENV{$_};
}
Run Code Online (Sandbox Code Playgroud)
这看起来很明显是我眼中的缺陷.只要当前请求不为给定变量提供值,它就会从环境变量的持久副本复制到脚本可见的环境副本中.因此,如果请求没有cookie,那么它将找不到定义的HTTP_COOKIE,因此它将为脚本提供发送它们的最后一个请求的cookie,这意味着其他会话!我不明白这段代码怎么可能是正确的,这是一个非常高度使用的模块!
我有一个C++程序充当CGI脚本,我目前正在使用Cgicc为我做一些解析和格式化(虽然它可能会在某些时候被替换).在构建我的响应时,我会使用cgicc::HttpResponseHeader,这将创建类似的东西
HTTP/1.1 302 Found
Location: www.bla.com
Run Code Online (Sandbox Code Playgroud)
这看起来很标准.然而,Web服务器对此感到窒息,给了我一个
<...> malformed header from script. Bad header=HTTP/1.1 302 Found: script.cgi
Run Code Online (Sandbox Code Playgroud)
我发现了如何解决这个问题:
HTTP/...行Status: 302 Found 事实上,这正是这样cgicc::HttpRedirectHeader做的.我现在有两个问题:
HTTP/1.1 302 Found不标准吗?cgicc::HttpResponseHeader这样做?如果是,为什么我的网络服务器会窒息?注意我不是在寻找解决这个问题的方法,我知道如何做到这一点.我只想了解最新情况.
干杯Ole
我有一个小的Perl程序,我想在命令行上运行.我需要require另一个其他人编写的Perl脚本(不是模块).反过来,这require是一些其他脚本.(我无法对这种方式做任何事情).
现在,这些脚本中的一个已经存在并且非常令人讨厌.我不要那个.每次出现故障时,我的控制台上都有15行,这让我很紧张.我试过了use CGI;use CGI::Carp qw(fatalsToBrowser)500 Internal Server Error page
require 'otherscript.pl';
no CGI;
no CGI::Carp;
Run Code Online (Sandbox Code Playgroud)
和
no CGI;
no CGI::Carp;
require 'otherscript.pl';
Run Code Online (Sandbox Code Playgroud)
卸载它,就像使用doc描述的那样,但它不起作用.
我可以以某种方式操纵符号表或做一些其他魔法来摆脱它吗?
我必须在具有CGI-PHP的环境中运行我的CakePHP 2.1应用程序,并且无法声明apache别名.我想用mod_rewrite将请求重定向到子域到CakePHP,但这没有用.
当前设置
~/user/public_html~/user/public_html/cakephp/dev.mydomain.tld我到现在所拥有的是(所有路径相对于webroot):
~/user/public_html/.htaccess
RewriteEngine on
Options +FollowSymlinks
RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC]
RewriteCond %{REQUEST_URI} !/$
RewriteCond %{DOCUMENT_ROOT}/cakephp/app/webroot%{REQUEST_URI}/ -d
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1/ [R,L]
RewriteCond %{HTTP_HOST} ^(www\.)?dev\.mydomain.com$ [NC]
RewriteCond %{REQUEST_URI} !^/cakephp/app/webroot/ [NC]
RewriteRule ^(.*)$ /cakephp/app/webroot/$1 [L]
Run Code Online (Sandbox Code Playgroud)~/user/public_html/cakephp/app/webroot/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,L]
Run Code Online (Sandbox Code Playgroud)问题
请求以某种方式未正确路由(应用程序在我的开发环境中运行时没有问题,PHP作为模块和/cakephp/app/webroot/级别的虚拟主机).当我请求主页时,dev.mydomain.tld我只得到一个错误,Cake告诉我,CakephpController丢失了.
调试信息
$_SERVER调试的有趣部分作为第一行/cakephp/app/webroot/index.php
[REDIRECT_REDIRECT_REDIRECT_STATUS] => 200
[REDIRECT_REDIRECT_STATUS] => 200
[REDIRECT_HANDLER] => php-script
[REDIRECT_STATUS] => On …Run Code Online (Sandbox Code Playgroud)鉴于一个刚刚搭建的Yesod应用程序,获取作为CGI程序的可执行文件所需的最小变更集是什么?包装程序是可以接受的.如果'cabal build'构建的默认可执行文件是CGI程序,则必须设置哪些环境变量才能充当CGI(默认情况下,它将绑定到端口并尝试在那里提供请求.)
对于FastCGI的类似答案也将受到赞赏.
我是Python(和网络抓取)的新手.让我问你一个问题.
许多网站实际上并未在Firefox或其他浏览器中报告其特定URL.例如,社会安全管理员显示具有等级的流行婴儿名字(自1880年以来),但当我将年份从1880年改为1881年时,网址不会改变.它是不断的,
http://www.ssa.gov/cgi-bin/popularnames.cgi
因为我不知道具体的URL,所以我无法使用urllib下载网页.
在此页面源中,它包括:
<input type="text" name="year" id="yob" size="4" value="1880">
所以,假设我可以控制这个"年"值(比如"1881"或"1991"),我可以解决这个问题.我对吗?我还是不知道怎么做.
有人可以告诉我解决方案吗?
如果您了解一些可能有助于我学习的网站,请告知我们.
谢谢!
我有一个冻结的wxpython应用程序的用户获取附加的屏幕截图.
错误消息是"Windows错误:提供程序DLL无法正确初始化"
从暂停的视频中截取的屏幕截图是我从他们那里得到此错误消息的唯一方法,因为整个事情立即消失(包括创建此DOS窗口以捕获stderr,此消息出现在哪里).IE python在它真正开始之前就已经死了.
回溯指向我在controller.py第14行的代码.
这条线是
import cgi
出于某种原因,似乎cgi在导入期间调用随机(为什么会这样?)并且出于某种原因,由于某些DLL原因,这是失败的.
有线索吗?
注1:此应用程序适用于数百个其他Windows和Mac用户.所以就好像我不提供某些不仅仅是因为这个用户的机器而出于某种原因的东西.
注2:使用bbfreeze创建可执行文件,使用以下配置:
f = Freezer(distdir = distdir,
includes = ['wx.lib.pubsub.core.kwargs.*',
'wx.lib.pubsub.core.*',
'dbhash',
'platform']
)
Run Code Online (Sandbox Code Playgroud)
我不确定我还会在这里放什么.'CGI'?'随机'?

cgi ×10
python ×4
apache ×2
fastcgi ×2
perl ×2
cakephp ×1
cakephp-2.1 ×1
firebug ×1
haskell ×1
html ×1
http ×1
javascript ×1
mod-rewrite ×1
php ×1
urllib ×1
vms ×1
web-scraping ×1
windows ×1
wxpython ×1
yesod ×1