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

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

如何解决《确定命令行与PHP脚本的http执行的规范方法是什么?》经验,为你挑选了4个好方法。

我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要用于输出格式化.这样做的规范方法是什么?我原以为是要检查SERVER['argc'],但事实证明这是填充的,即使使用'Apache 2.0 Handler'服务器API也是如此.



1> 小智..:

使用该php_sapi_name()功能.

if (php_sapi_name() == "cli") {
    // In cli-mode
} else {
    // Not in cli-mode
}

以下是文档中的一些相关说明:

php_sapi_name - 返回Web服务器和PHP之间的接口类型

尽管不是详尽无遗,但可能的返回值包括aolserver,apache,apache2filter,apache2handler,caudium,cgi(直到PHP 5.3),cgi-fcgi,cli,cli-server,continuity,embed,isapi,litespeed,milter,nsapi,phttpd, pi3web,roxen,thttpd,tux和webjames.

在PHP> = 4.2.0中,还有一个预定义的常量PHP_SAPI,它具有与之相同的值php_sapi_name().


@Bobby,php.net文档中的示例实际上只通过查看字符串的前三个字符来匹配"cgi"和"cgi-fcgi"......这就是为什么它实际上是有意义的.如果有什么事情只是为了回到@hop来调用php而不是严肃的程序员语言:D

2> Xeoncross..:

这将始终有效.(如果PHP版本是4.2.0或更高版本)

define('CLI', PHP_SAPI === 'cli');

这使您可以轻松地在脚本的顶部使用:


"这使得在脚本顶部使用起来很容易"并不能让它听起来像两个单独的用途.是的,我是一名死灵法师.
你的第二个片段看起来像是不合理的,我希望`CLI或死('不允许');`

3> ya.teck..:

这是Drupal 7的实现:drupal_is_cli():

function drupal_is_cli() {
  return (!isset($_SERVER['SERVER_SOFTWARE']) && (php_sapi_name() == 'cli' || (is_numeric($_SERVER['argc']) && $_SERVER['argc'] > 0)));
}

但Drupal 8 建议使用PHP_SAPI === 'cli'


这也适用于运行php-cgi,太棒了!

4> Vinko Vrsalo..:

我认为

$_SERVER['REMOTE_ADDR']

将不会从CLI填充.

此外,$ _SERVER超全局中的所有HTTP_*键都不会从CLI填充,或者以刚才提到的正确方式执行:-)

推荐阅读
罗文彬2502852027
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有