回答:
php_sapi_name()
関数を使用します。
if (php_sapi_name() == "cli") {
// In cli-mode
} else {
// Not in cli-mode
}
ここにドキュメントからのいくつかの関連するメモがあります:
php_sapi_name —ウェブサーバーと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()
。
これは常に機能します。(PHPバージョンが4.2.0以降の場合)
define('CLI', PHP_SAPI === 'cli');
これにより、スクリプトの上部で使いやすくなります。
<?php PHP_SAPI === 'cli' or die('not allowed');
CLI or die('not allowed');
CLI or die('not allowed');
完璧です。
Which makes it easy to use at the top of your scripts
実際には、2つの異なる用途のように聞こえるわけではありません。はい、私はネクロマンサーです。
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'
おもう
$_SERVER['REMOTE_ADDR']
CLIからは読み込まれません。
また、$ _ SERVERスーパーグローバルのすべてのHTTP_ *キーは、CLIから入力されません。
php_sapi
_name のドキュメントページには、その動作方法が明記されています。
PHPが使用しているインターフェイスのタイプ(サーバーAPI、SAPI)を説明する小文字の文字列を返します。
網羅的ではありませんが、可能な戻り値にはaolserver、apache、apache2filter、apache2handler、caudium、cgi(PHP 5.3まで)、cgi-fcgi、cli、continuity、embed、isapi、litespeed、milter、nsapi、phttpd、pi3web、roxen、 thttpd、tux、およびwebjames。
PHPが真面目なプログラマー向けだとホップが思っていない理由はわかりません(私は真面目なプログラマーであり、私は毎日PHPを使用しています)。そのPHPは、各サーバーで実行可能なすべてのインターフェイスタイプの名前を実行して決定できます。新しいWebサーバーとインターフェイスが追加されたときに、そのリストを更新しておいてください。
また、ボビーは言った:
なぜそのドキュメントなのか興味をそそられます。例では、最初の3文字を検査しますが、説明では文字列は正確に「CGI」である必要があります
例の説明は次のとおりです。
この例では、cgi-fcgiの場合もあるので、部分文字列cgiをチェックします。