当前位置:  开发笔记 > 编程语言 > 正文

如何区分命令行和Web服务器调用?

如何解决《如何区分命令行和Web服务器调用?》经验,为你挑选了1个好方法。

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

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


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

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

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

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



1> Shocker..:

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

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

更新:由于此答案仍然标记为"正确",我想修改我的陈述 - 依赖"User-Agent"标题可能会有问题,因为它是用户定义的值.

请使用php_sapi_name() == 'cli'或者PHP_SAPI == 'cli',如评论中Eugene/cam8001所建议的那样.

感谢您指出了这一点!


请改用`php_sapi_name()=='cli'
或者您可以使用常量PHP_SAPI http://uk3.php.net/manual/en/function.php-sapi-name.php#refsect1-function.php-sapi-name-notes
使用常量...如果您允许CLI用户执行正常受限制的操作,那么我需要做的就是向您发送一个自定义HTTP_USER_AGENT,其中包含字符串"CLI".
这不是===比==更好吗?
推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有