1

我已经搜索并发现了几个与我非常相似的问题,但这些答案中没有任何东西对我有用。

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

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

到目前为止,我已经尝试过exec,system(传递 1 作为第一个参数),system(不使用 1 作为第一个参数并调用' start')和 Win32::Process. 使用带有 1 作为第一个参数的 system 在 Apache 日志中出现错误:

'1' 未被识别为内部或外部命令,\r,引用者:http: //my.server.com/cgi-bin/upload.cgi

没有其他任何东西给我任何错误,但它们似乎不起作用。第二个脚本将一条消息记录到 Windows 事件日志中,这是它首先要做的事情之一。没有创建日志条目。

它在 Omni webserver 下的本地机器上运行良好,但在运行 Apache 的实际服务器机器上却不行。是否有可能影响此的 Apache 配置?该upload.cgi脚本位于d:\wwwroot\test\cgi-bindir 中,但另一个脚本位于同一台机器上的其他位置 ( d:\wwwroot\scripts)。

4

1 回答 1

1

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

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

于 2012-10-22T22:31:20.920 回答