我在Windows上运行Apache Web服务器,以便处理一些Perl CGI脚本.在生产中这些脚本在linux机器上运行,并且在源代码库中它们都有像shebangs一样#!/usr/bin/perl,但是在我的Windows机器上,shebangs会是#!c:\perl\bin\perl.exe,所以我与源代码库有冲突.
输入Apache ScriptInterpreterSource指令.
我一直试图让它工作,基于我可以谷歌.但到目前为止还没有运气.我有:
将这些内容添加到适当的指令AllowOverride无
选项索引FollowSymLinks ExecCGI顺序允许,拒绝允许来自所有ScriptInterpreterSource Registry-Strict
补充:AddHandler cgi-script .cgi
编辑了我的注册表并添加了一个新的String
Run Code Online (Sandbox Code Playgroud)HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command=C:\Perl\bin\perl.exe
现在,我知道只要他们拥有合适的shebang,CGI就可以在这台服务器上运行.
但是当我尝试访问没有shebang的CGI时,apache日志会吐出:
没有为'.cgi'类型的文件找到Exec CGI Verb
任何想法,见解,甚至疯狂的猜测都将不胜感激.
谢谢.
我正在评估使用Delphi(ISAPI/CGI/...)编写Web应用程序的可能性.我仍然看不到使用Delphi而不是"经典"Web开发框架的充分理由.
如果您有这方面的经验,请分享您的意见.你会推荐Delphi而不是PHP/Rails/ASP/......吗?你知道用Delphi编写的任何Web应用程序吗?(不是网络服务)
我们刚刚在CS课程中获得了第一个主要的Perl CGI作业.我们的任务是创建一个mp3共享站点,允许用户创建帐户,登录,共享mp3.必须显示当前用户的统计信息,可用的mp3等.必须将所有操作写入日志文件.我们的代码必须安全.
到目前为止,我已将这些操作分别实现为自己的CGI脚本.例如,我有一个脚本可以绘制登录表单,注册表单,允许mp3上传的脚本,以及另一个执行mp3服务的脚本.我还创建了一个模块,每当我调用它的实例时,它都会将相关信息发布到日志文件中.但是,每个脚本都是单独的,但登录屏幕除外,它会绘制一个表单,然后发布到login.cgi.帐户生成的工作原理相同.但是,在大多数情况下,每个人都独立行事.
我的问题:如何将这些链接在一起,以便除非用户登录,否则不允许任何操作?我假设我应该使用登录脚本(接收post动作的脚本)来驱动一切,但我该怎么做?我真的很茫然.我想有一个用户登录,主页是用选项绘制的(添加mp3,听mp3,显示统计等).我最好是绘制某种形式并将动作设置为不同的脚本吗?如何处理这些脚本的返回?饼干会以某种方式帮助吗?
其他相关信息:到目前为止,我使用本网站上的ovid教程和Lincoln Stein的书完成了CGI.pm的大部分工作.
使用CGI :: Session :: Auth :: DBI和CGI :: Session :: Auth页面中的示例,我试图实现该_login功能但没有成功.我正在使用Windows 7和Apache 2.
#!/usr/bin/perl -w
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;
use CGI::Session;
use CGI::Session::Auth::DBI;
my $cgi = new CGI;
# using '.' directory for testing
my $session = new CGI::Session(undef, $cgi, {Directory=>'.'});
my $auth = new CGI::Session::Auth::DBI({
CGI => $cgi,
Session => $session,
DSN => 'dbi:mysql:dbname=foobar:host=localhost',
DBUser => 'foo',
DBPasswd => 'bar',
UserTable => 'cgi_auth_user' # auth_user already in use
});
print …Run Code Online (Sandbox Code Playgroud) 背景:我正在为一家允许用户通过Web界面创建FTP帐户的公司编写脚本.在后台,脚本必须运行一堆命令:
还有其他一些事情......
我基本上都在寻找最安全的方法.我听说过setuid方法,sudo方法,当然还有httpd作为特权用户运行.在执行任何命令之前,将对输入的数据进行完整性检查(即,仅用户名中的字母数字字符)
流行脚本使用的方法是什么(例如webmin),因为它必须相当安全?
我有一个python脚本,我想知道请求是来自Web还是命令行.我怎样才能做到这一点?
我认为这个问题非常自我解释,但我使用perl来生成一个网页.开始使用:
$cgi->start_html(-title=>'myPage',-style=>{-src=>'style.css'}, -script=>{-type=>'JAVASCRIPT', -src=>'custom.js'}, );
Run Code Online (Sandbox Code Playgroud)
项目清单
但是如果我想在标题中有多个脚本呢?还是多个CSS样式表?
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript" src="custom.js"></script>
<link rel="stylesheet" href="css/basic.css" type="text/css" />
<link rel="stylesheet" href="css/style.css" type="text/css" />
Run Code Online (Sandbox Code Playgroud) 根据IIS.net的指南,使用WP-SuperCache在IIS 7(Windows Server 2008)上运行WordPress .
运行良好,但最近我们更改了一些文件夹和管理员密码的权限,我们的CPU使用率因PHP-cgi.exe进程而大幅增加.


这让我相信它不是缓存,但页面本身在底部有"缓存与WP-SuperCache"注释,并且缓存似乎正常工作.
这还有什么问题呢?
开发环境是OS X 10.10.3,Perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for darwin-thread-multi-2level
(with 2 registered patches, see perl -V for more detail)
Run Code Online (Sandbox Code Playgroud)
这是问题所在
我将项目从本地环境移动到Windows Server,现在我收到以下错误:
"引用的密钥在CGI/Router.pm第94行是实验性的."
该模块的第94行显示
my $num_regexes = scalar keys $token_regexes;
Run Code Online (Sandbox Code Playgroud)
整个模块可以在这里找到https://github.com/kristiannissen/CGIRouter
我像这样实例化路由器模块
$router->add_route( 'GET', '/home', sub {
print header( -type => 'text/html', -charset => 'utf-8' );
print "Hello Pussy";
});
Run Code Online (Sandbox Code Playgroud)
我在本地没有这个问题,但现在我正在转向生产服务器,我遇到了这个问题.据我所知,它与特定的Perl版本有关,但在我要求提供商升级Perl之前,我想我能做些什么来避免这个问题?
我已经安装了Windows Server2016虚拟机,并使用CGI,ISAPI,.Net等安装了IIS。我唯一的志向是用旧的CGI方法运行python脚本:请求的python文件,在单独的新文件中执行过程完成。
我按照一系列教程的建议添加了脚本映射。我确保相应地设置ISAPI筛选器和CGI限制。我似乎仍然无法解决404.2的问题。显然,找到了映射,test.py文件存在,并且我已经在“完全控制”中打开了“所有人”的文件系统,以确保这不是问题。
在ISAPI和CGI限制中,我尝试了不同的格式:有和没有%s%s,有和没有引号等。
我尝试在本地脚本上使用该python.exe命令,它运行正常。IIS出现问题,无法解决。
从Web浏览器浏览根文件夹可以成功工作并列出.py文件。
自定义网站的Web配置,显示python脚本映射
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers accessPolicy="Read, Execute, Script">
<add name="Python" path="*.py" verb="*" modules="CgiModule" scriptProcessor="C:\Anaconda3\python.exe %s %s" resourceType="Either" requireAccess="Script" />
</handlers>
<directoryBrowse enabled="true" />
</system.webServer>
</configuration>
Run Code Online (Sandbox Code Playgroud)