从CGI脚本生成外部进程

时间:2012-10-22 19:41:45

标签: perl apache2 cgi

我已经搜索过并发现了几个非常类似的问题,但这些答案中没有任何内容对我有用。

我有一个接受文件上传的perl CGI脚本。它查看文件并确定应如何处理它,然后调用第二个非CGI脚本来进行实际处理。至少,这就是 的工作方式。

这是在运行Apache 2.0.59和ActiveState Perl 5.8.8的Windows上运行的。文件上传部分工作正常,但我似乎无法使用 upload.cgi 脚本来运行执行实际处理的第二个脚本。第二个脚本不以任何方式与发送文件的用户进行通信(除非它在完成时发送电子邮件)。我希望CGI脚本运行第二个脚本(在一个单独的过程中),然后“离开”。

到目前为止,我已尝试exec,系统(传递1作为第一个参数),系统(不使用1作为第一个参数并调用' start ' )和Win32 :: Process。使用带有1作为第一个参数的系统给了我Apache日志中的错误:

  

'1'无法识别为内部或外部命令,\ r,referer:http://my.server.com/cgi-bin/upload.cgi

没有其他任何东西给我任何错误,但他们似乎没有工作。第二个脚本将消息记录到Windows事件日志中,作为它的第一件事。没有创建日志条目。

它在Omni webserver下的本地机器上工作正常,但在运行Apache的实际服务器机器上却没有。是否存在可能影响此问题的Apache配置? upload.cgi 脚本位于 d:\wwwroot\test\cgi-bin 目录中,但另一个脚本位于同一台计算机上的其他位置( d:\wwwroot\scripts < / em>的)。

1 个答案:

答案 0 :(得分:1)

可能存在与安全相关的问题,但在日志中应该很明显。 这不能完全回答您的问题,但它可能会为您提供其他实施方案,您将无法面对潜在的安全性和性能问题。

我不太喜欢将我的Web服务器环境与system()调用混合在一起。相反,我创建了一个应用程序服务器(通常为POE),它接受来自Web服务器的相关参数,处理作业,并在完成后通知Web服务器。 (好吧,通知部分可能不是直截了当的,但这是另一个话题。)