Como verificar com PHP se o script está sendo executado a partir do pedido de console ou navegador?

StackOverflow https://stackoverflow.com/questions/1042501

Pergunta

Eu tentei coisas como $ _ENV [ 'CLIENTNAME'] == 'Console', mas que parece funcionar em apenas alguns sistemas operacionais (trabalhou em janelas, não linux).

Eu tentei! Empty ($ _ ENV [ 'SHELL']), mas que não funciona sempre ou ...

Existe uma maneira de verificar isso que irá trabalhar em todo o OS / ambientes?

Foi útil?

Solução

Use php_sapi_name()

Retorna uma string minúscula que descreve o tipo de interface (o API Server, SAPI) que o PHP está usando. Por exemplo, no CLI PHP esta cadeia será "cli", enquanto que com Apache-lo pode ter vários valores diferentes dependendo do SAPI exato usado.

Por exemplo:

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

Você também pode usar o PHP_SAPI constante

Outras dicas

Verifique na http://php.net/manual/en/features. commandline.php # 105568 "PHP_SAPI" Constant

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

Eu sei que isto é uma questão de idade, mas para o registro, eu vejo solicitações HTTP entrando sem um cabeçalho User-Agent e PHP não definir automaticamente HTTP_USER_AGENT neste caso.

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

$ coounts argc a quantidade de argumentos passado para a linha de comando. Simplesmente usando php page.php, $ argc retornará 1

Chamando page.php com um navegador, $ argc retornará NULL

Uma solução é verificar se STDIN está definida:

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

Verifique a HTTP_USER_AGENT, deve existir em http pedido

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top