为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕桂英4014372 2019-10-26 11:07:35
我有一个PHP脚本,需要确定它是通过命令行还是通过HTTP执行的,主要是出于输出格式化的目的。这样做的规范方法是什么?我以为是要检查的SERVER['argc'],但事实证明,即使使用“ Apache 2.0 Handler”服务器API时,它也已被填充。
查看完整描述

3 回答

?
慕码人8056858

TA贡献1803条经验 获得超6个赞

使用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()。


查看完整回答
反对 回复 2019-10-26
?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

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


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

这使得在脚本顶部易于使用:


<?php PHP_SAPI === 'cli' or die('not allowed');


查看完整回答
反对 回复 2019-10-26
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

这是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'


查看完整回答
反对 回复 2019-10-26
  • 3 回答
  • 0 关注
  • 464 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信