有没有一种方法来区分,如果一个脚本是援引自该命令行或通过网页的服务器?

(看看 什么是规范的方式确定与commandlinehttp执行PHP script? 对于最好的答案 更详细的讨论没有找到那一个之前发布)


我有一个(非生产)服务器使用Apache2.2.10和PHP5.2.6.在这,在一个网可访问的目录是我的PHP script, maintenance_tasks.php.我要援引这个脚本从命令行或通过HTTP请求(通过打开浏览器)。是否有一些可变的,让我可以可靠地确定如何脚本是援引?

(我已经解决的问题的不同看法,为每种类型的援引和HTTP响应超时,只是在寻找一个方式告诉两个调用类型开)

我会尝试不同的东西,并添加我的调查结果如下。

重复: 什么是规范的方式确定与commandlinehttp执行PHP script?

有帮助吗?

解决方案

<击>如果从命令行调用,则服务器变量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版本,但我不知道这是不够可靠。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top