2009-06-25 10 views
31

Ho provato cose come $ _ENV ['CLIENTNAME'] == 'Console' ma sembra funzionare solo su determinati SO (funzionanti in Windows, non in Linux).Come verificare con PHP se lo script viene eseguito dalla console o richiesta del browser?

ho provato! Empty ($ _ ENV [ 'SHELL']), ma questo non funziona sempre o ...

C'è un modo per controllare questo che funzionerà in tutti i sistemi operativi/ambienti?

Grazie!

+0

Dupe http://stackoverflow.com/questions/607373/is-there-any-way-to-know-if-a-php-script-is-running-in-cli-mode –

risposta

59

Usa php_sapi_name()

Restituisce una stringa in minuscolo che descrive il tipo di interfaccia (API Server, SAPI) che PHP sta usando. Ad esempio, in CLI PHP questa stringa sarà "cli" mentre con Apache lo potrebbe avere diversi valori a seconda dell'esatto SAPI utilizzato.

Ad esempio:

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

È inoltre possibile utilizzare la costante PHP_SAPI

-1

Controllare il HTTP_USER_AGENT, dovrebbe esistere in richiesta http

+0

Esistono tutti i tipi di variabili in $ _SERVER che funzionano sotto la stessa idea. –

+3

L'agente utente è facoltativo. Non ci farei affidamento, poiché c'è una soluzione molto migliore –

2

So che questa è una vecchia questione, ma per la cronaca, vedo richieste HTTP in arrivo senza User- L'intestazione dell'agente e PHP non definiscono automaticamente HTTP_USER_AGENT in questo caso.

+0

È già stato menzionato in un commento qui sotto, non puoi fare affidamento su HTTP_USER_AGENT perché è un'intestazione opzionale. –

+0

Hai fatto la mia risposta a valle e poi hai lasciato un commento dicendo la stessa identica cosa che ho detto, Nick? Bello. Il mio punto, 5 anni fa, quando ho lasciato questo commento, era di dire all'OP che HTTP_USER_AGENT non è affidabile. – SteveK

+0

Oh wow, ovviamente l'ho letto male. Promemoria di non navigare in SO mentre si è assonnati. Potresti modificare un po 'la tua risposta in modo da poter cambiare il mio voto? Mi dispiace per quello –

0

Una soluzione è quella di verificare se STDIN è definito:

if (!defined("STDIN")) { 
    die("Please run me from the console - not from a web-browser!"); 
} 
1
if ($argc > 0) { 
    // Command line was used 
} else { 
    // Browser was used 
} 

$ argc coounts la quantità di argomenti passati alla riga di comando. Semplicemente usando php page.php, $ argc tornerà 1

Chiamata page.php con un browser, $ argc restituirà NULL

Problemi correlati