5

重複の可能性:
phpでは、実行を検出する方法はCLIモードまたはブラウザーからですか?

PHPスクリプトがシェル(コマンドライン)で実行されているのか、サーバーで実行されているのかを確認するにはどうすればよいですか?

4

4 に答える 4

11

php_sapi_name次の関数を使用します。

if(php_sapi_name() == 'cli')
{
    // running from CLI
}

マニュアルから:

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

于 2012-11-26T17:25:54.293 に答える
7

あなたが本当にそれに興味があるなら、ここにシェルソリューションがあります:

ps -ef | grep $scriptname | grep -v grep;
if [[ $? -eq 0 ]]; then
    echo "PROCESS IS RUNNING";
fi

説明:

ps -ef            ## lists all running processes
grep $scriptname  ## keep only the process with the name we suppply
grep -v grep      ## the previous grep will show up in the ps -ef so this prevents false positives.  

if [[ $? -eq 0 ]]; then
    echo "PROCESS IS RUNNING";
fi                    ## if the last line returns something then process is running.  
于 2012-11-26T17:27:33.420 に答える
2

$argv変数の存在を確認できます。

または

これらを確認できます。

if(isset($_SERVER['HTTP_USER_AGENT']) && strpos($_SERVER['HTTP_USER_AGENT'],"CLI") !== FALSE) {
 ///
}
于 2012-11-26T17:25:49.567 に答える
1

これは私の製品環境で機能します:

if( substr(php_sapi_name(), 0, 3) == 'cli' ) {
    die("You Should Use CGI To Run This Program.\n");
}
于 2012-11-26T17:37:24.657 に答える