web-dev-qa-db-ja.com

スクリプトがコンソールまたはブラウザのリクエストから実行されているかどうかをPHPで確認するにはどうすればよいですか?

$ _ENV ['CLIENTNAME'] == 'Console'のようなものを試しましたが、それは特定のOSでのみ機能するようです(LinuxではなくWindowsで機能します)。

!empty($ _ ENV ['Shell'])を試しましたが、常に機能するとは限りません...

すべてのOS /環境で機能するこれを確認する方法はありますか?

37
EdanB

php_sapi_name() を使用します

PHPが使用しているインターフェイス(サーバーAPI、SAPI)のタイプを説明する小文字の文字列を返します。たとえば、CLI PHP 「cli」に対して、Apacheでは、使用される正確なSAPIに応じていくつかの異なる値を持つ場合があります。

例えば:

$isCLI = ( php_sapi_name() == 'cli' );

定数PHP_SAPIを使用することもできます

73
Tom Haigh

チェックしてください http://php.net/manual/en/features.commandline.php#105568 "PHP_SAPI"定数

<?php
if (PHP_SAPI === 'cli')
{
   // ...
}
?> 
10
Ganesh Kandu

これは古い質問ですが、記録として、User-AgentヘッダーなしでHTTPリクエストが着信し、PHPは、この場合、HTTP_USER_AGENTを自動的に定義しません。

2
SteveK
if ($argc > 0) {
    // Command line was used
} else {
    // Browser was used
}

$ argcは、コマンドラインに渡される引数の量を調整します。 php page.phpを使用するだけで、$ argcは1を返します

ブラウザでpage.phpを呼び出すと、$ argcはNULLを返します

2
Andrea Mauro

1つの解決策は、STDINが定義されているかどうかを確認することです。

if (!defined("STDIN")) {
    die("Please run me from the console - not from a web-browser!");
}
1