【发布时间】:2025-12-17 21:30:01
【问题描述】:
有没有一种好方法可以检测 Perl 脚本是从终端/DOS 调用还是从 Web 服务器调用。
我目前有这个代码:
sub cli {
# return 1 if called from browser, 0 if called from command line
if (defined $ENV{GATEWAY_INTERFACE} || exists $ENV{HTTP_HOST}){
return 0;
}
return 1;
}
但请注意,并非所有服务器都设置了这些 ENV 变量。
如果脚本从终端运行,我将打印文本/纯格式的消息,如果从浏览器运行,我将打印 HTML 格式的消息。
【问题讨论】:
-
如this question 中所示,也许检查
$ENV{REQUEST_METHOD},因为CGI就是这样确定Web 请求和命令行调用之间的区别的。 -
您的终端是否在网络服务器上?
-
@vol7ron 我看到接受的答案正在检查
$ENV{GATEWAY_INTERFACE},所以仍然没有一种方法得到所有人的确认,但是你指出这个答案很好,它有很多新想法 -
就我个人而言,我的技术是将大部分脚本移动到提供
to_text和to_html函数/方法的模块中。然后有两个脚本 - 一个调用to_text,一个调用to_html。通过 Web 浏览器访问 HTML 输出脚本,并在命令行运行文本输出脚本。简单。
标签: perl