Como verificar com PHP se o script está sendo executado a partir do pedido de console ou navegador?
-
22-07-2019 - |
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?
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