- 此问题在此处已有答案**:
14年前就关闭了。
是否有办法区分脚本是从命令行调用的还是由Web服务器调用的?
(请参见What is the canonical way to determine commandline vs. http execution of a PHP script?以获取最佳答案和更详细的讨论-在发布之前未找到该答案)
我有一个安装了Apache 2.2.10和PHP 5.2.6的(非生产)服务器。在该服务器上,我的PHP脚本maintenance_tasks.php
位于一个可通过Web访问的目录中。我想从命令行或通过HTTP请求(在浏览器中打开)调用此脚本。是否有一些变量允许我可靠地确定脚本是如何调用的?
(我已经解决了每种调用类型的不同视图和HTTP响应超时的问题,只是想找到一种区分这两种调用类型的方法)
我将尝试不同的东西,并把我的发现添加到下面。
2条答案
按热度按时间l0oc07j21#
如果从命令行调用,则不设置服务器变量HTTP_USER_AGENT。我使用此常量来定义是否从命令行调用脚本:
请按照Eugene/cam8001在评论中的建议使用
php_sapi_name() == 'cli'
或PHP_SAPI == 'cli'
。谢谢你指出这一点!
bihw5rsg2#
我比较了两次调用中的
$_SERVER
超全局函数,似乎$_SERVER['argc']
(即传递给脚本的参数数量)仅在从shell/命令行运行时设置:这似乎在Linux和Windows主机上都有效。(首先,我考虑检查一些环境变量,但这些变量对于每个操作系统都是不同的。此外,CLI版本中缺少所有
$_SERVER['HTTP_*']
标头,但我不确定这是否足够可靠。)