2010-01-02 16 views
74

Ho uno script comune che Im include nei miei file PHPcron e nei file che stanno accedendo attraverso il browser. Alcune parti del codice, ho bisogno solo di file non cron. Come posso rilevare se l'esecuzione è da CLI o tramite browser (so che può essere fatto passando alcuni argomenti con i file cron ma non ho accesso a crontab). C'è un altro modo?In PHP, come rilevare l'esecuzione è dalla modalità CLI o tramite browser?

risposta

136

Utilizzare la funzione php_sapi_name().

if (php_sapi_name() == "cli") { 
    // In cli-mode 
} else { 
    // Not in cli-mode 
} 

Ecco alcune note importanti dalla documentazione:

php_sapi_name - Restituisce il tipo di interfaccia tra web server e PHP

Anche se non esaustivo, i possibili valori di ritorno includono AOLserver , apache, apache2filter, apache2handler, caudium, cgi (fino a PHP 5.3), cgi-fcgi, cli, cli-server, continuità, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux e webjames .

+2

+1 l'unico modo giusto per farlo. –

+4

anche il PHP_SAPI può essere utilizzato per questo, quindi non è proprio l'unico modo corretto per farlo – mishu

+11

Questa era una risposta solo al collegamento finché qualcuno non ha copiato la risposta di @Linus Unnebäck. Cattiva abitudine! Svuota questo, upvote l'altro ... –

3

Penso che tu possa vederlo dalle variabili $ _SERVER. Prova a stampare l'array $ _SERVER per entrambi i browser & CLI e dovresti vedere le differenze.

+1

Questo può essere vero, ma non può essere un modo affidabile per determinare l'interfaccia utilizzata. Il modo corretto per controllare è con 'php_sapi_name()'. – DesignerGuy

13

C'è una costante PHP_SAPI ha lo stesso valore di php_sapi_name().

(disponibile in PHP> = 4.2.0)

+0

Questo è il modo migliore! – Ankit

-4

È possibile utilizzare:

if (isset($argc)) 
{ 
    // CLI 
} 
else 
{ 
    // NOT CLI 
} 
+3

-1 - '$ argc' potrebbe essere stato impostato all'interno dell'applicazione, no? Non è un metodo affidabile. Mi è costato una mezza giornata di lavoro una volta. 'php_sapi_name()' è l'unico buon modo che conosco. –

+0

anche $ argv/$ argc può essere riempito con variabili GET su alcune configurazioni! –

61
if(php_sapi_name() == "cli") { 
    //In cli-mode 
} else { 
    //Not in cli-mode 
} 
Problemi correlati