To find out are you in CLI or not, this is much better in my opinion:
<?php
if (PHP_SAPI != "cli") {
exit;
}
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
$argc — スクリプトに渡された引数の数
コマンドラインから実行したときに、 現在のスクリプトに渡された引数の数が含まれます。
注意: スクリプトのファイル名は、常にスクリプトへの引数として渡されます。 したがって、$argc の最小値は
1
です。
注意: この変数は、register_argc_argv が無効になっている場合には使えません。
例1 $argc の例
<?php
var_dump($argc);
?>
このサンプルを php script.php arg1 arg2 arg3 と実行します。
上の例の出力は、 たとえば以下のようになります。
int(4)
注意:
これは、$_SERVER['argc'] としても使用可能です。
To find out are you in CLI or not, this is much better in my opinion:
<?php
if (PHP_SAPI != "cli") {
exit;
}
?>
Note: when using CLI $argc (as well as $argv) are always available, regardless of register_argc_argv, as explained at http://docs.php.net/manual/en/features.commandline.php
To decide whether my script is run from CLI I simply create a PHP script that handles only CLI invocations.
File cron.php:
<?php
// Set environment variables your application depends on
$_SERVER[ 'HTTP_HOST' ] = 'domain.tld';
// $_SERVER[ 'REQUEST_URI' ] = '/some/URI/if/needed';
// Use the environment to read out required values
$task = $_SERVER[ 'argv' ][ 1 ];
// Instanciate the dispatcher or whatever you use
$dispatcher = new Dispatcher();
$dispatcher->handle( $task );
?>
This way my application doesn't have to know about CLI at all.