如何区分命令

有没有办法区分脚本是从命令行还是由Web服务器调用?

请参阅什么是确定PHP脚本的命令行与http执行的规范方法?以获得最佳答案和更详细的讨论 - 在发布前没有找到该方法)


我有一个(非生产)服务器与Apache 2.2.10和PHP 5.2.6。 在它上面,在一个web访问目录中是我的PHP脚本maintenance_tasks.php 。 我想从命令行或通过HTTP请求(通过在浏览器中打开)调用此脚本。 是否有一些变量允许我可靠地确定脚本如何被调用?

(我已经针对每种类型的调用和HTTP响应超时解决了不同视图的问题,只是寻找将两种调用类型分开的方式)

我会尝试不同的事情并在下面添加我的发现。

Duplicate:确定PHP脚本的命令行与http执行的规范方法是什么?


如果从命令行调用,则未设置服务器变量HTTP_USER_AGENT。 我使用这个常量来定义脚本是否从命令行调用:

define("CLI", !isset($_SERVER['HTTP_USER_AGENT']));

更新:由于这个答案仍然被标记为'正确',我想修改我的声明 - 依赖于“用户代理”标题可能有问题,因为它是用户定义的值。

请根据评论中的Eugene / cam8001建议使用php_sapi_name() == 'cli'PHP_SAPI == 'cli'

感谢您指出了这一点!


我在两个调用中比较了$_SERVER超全局。 看起来$_SERVER['argc'] (即传递给脚本的参数的数量)仅在从shell /命令行运行时设置:

<?php
if (isset($_SERVER['argc'])) {
    define('CLI', true);
} else {
    define('CLI', false);
}

这似乎可以在Linux和Windows主机上运行。 (首先,我想过检查一些环境变量,但是对于每个操作系统来说都是不同的。另外,CLI版本中缺少所有$_SERVER['HTTP_*']头文件,但我不确定这是否是足够可靠。)

链接地址: http://www.djcxy.com/p/58863.html

上一篇: How to distinguish command

下一篇: Regarding if statements in PHP