【发布时间】:2012-12-19 18:43:29
【问题描述】:
我正在使用 FastCGI 开发一个 Perl 脚本(使用 CGI::Fast 和 CGI::Carp 'fatalsToBrowser')。
当我的脚本出现编译错误时,它会导致浏览器挂起。似乎fatalsToBrowser 不像普通 CGI 那样工作(只需将编译错误发送到浏览器)。我该如何解决这个问题?
【问题讨论】:
我正在使用 FastCGI 开发一个 Perl 脚本(使用 CGI::Fast 和 CGI::Carp 'fatalsToBrowser')。
当我的脚本出现编译错误时,它会导致浏览器挂起。似乎fatalsToBrowser 不像普通 CGI 那样工作(只需将编译错误发送到浏览器)。我该如何解决这个问题?
【问题讨论】:
我无法为您提供解决方法,只能提供解释,FastCGI 的工作方式完全不同。当 CGI 应用程序执行标准描述符并在执行之前提供环境时,在 FastCGI 应用程序中,服务器(应用程序)必须首先接受来自客户端(通常是 Web 服务器)的连接并在接受请求和响应之前交换一些消息/记录可以发送。 CGI::Carp 在 perl 的编译阶段发挥了神奇的作用,并假设在发生语法错误时(编译阶段)标准描述符可用,这对于 CGI::Fast.pm 来说还为时过早。
我是 FCGI.pm(和 libfcgi)的维护者之一,所以我将与 CGI 维护者一起解决这个问题。
【讨论】:
我是 CGI.pm 的维护者。在这种情况下,我建议避免使用“fatalsToBrowser”。一些 Perl 框架超越了做同样事情的功能。例如,对于 CGI::Application 有CGI::Application::Plugin::DebugScreen。其他框架也有类似的东西。
在其他情况下,如果流行的 'Carp' 和 'CGI::Carp' 模块最终都导入到相同的名称空间中,它们可能会发生冲突,因为它们都提供具有相同名称的函数,例如 'carp' 和 '发牢骚'。我建议使用 Carp 并避免使用 CGI::Carp。
【讨论】: