如何区分命令行和网络服务器调用?[重复]
-
19-08-2019 - |
题
有没有一种方法来区分,如果一个脚本是援引自该命令行或通过网页的服务器?
(看看 什么是规范的方式确定与commandlinehttp执行PHP script? 对于最好的答案 更详细的讨论没有找到那一个之前发布)
我有一个(非生产)服务器使用Apache2.2.10和PHP5.2.6.在这,在一个网可访问的目录是我的PHP script, maintenance_tasks.php
.我要援引这个脚本从命令行或通过HTTP请求(通过打开浏览器)。是否有一些可变的,让我可以可靠地确定如何脚本是援引?
(我已经解决的问题的不同看法,为每种类型的援引和HTTP响应超时,只是在寻找一个方式告诉两个调用类型开)
我会尝试不同的东西,并添加我的调查结果如下。
解决方案
<击>如果从命令行调用,则服务器变量HTTP_USER_AGENT未设置。我用这个常数来定义,是否该脚本的命令行调用或不击>
<击>define("CLI", !isset($_SERVER['HTTP_USER_AGENT']));
击> <击> 撞击>
更新:由于这个答案仍标记为“正确”的一个,我想修改我的发言 - 依托“用户代理”标头是有问题的,因为它是一个用户定义的值。
请使用php_sapi_name() == 'cli'
或PHP_SAPI == 'cli'
,通过评价尤金/ cam8001的建议。
感谢您指出了这一点!
其他提示
我比较了这两种调用的超全局$_SERVER
。似乎$_SERVER['argc']
(即传递给脚本变量数)仅设置为从壳/命令行运行时:
<?php
if (isset($_SERVER['argc'])) {
define('CLI', true);
} else {
define('CLI', false);
}
这似乎是在Linux和Windows主机的工作两者。 (首先,我想有关检查一些环境变量,但这些都是每一个操作系统的不同。此外,所有的$_SERVER['HTTP_*']
头中缺少CLI版本,但我不知道这是不够可靠。)
不隶属于 StackOverflow