Il titolo è semplice e diretto. Devo sapere sul lato server se lo script ha chiamato tramite richiesta HTTP o tramite riga di comando. Potrei esaminare lo $_SERVER['argv']
o lo $_SERVER['argc']
.
Qual è il modo pragmatico per farlo?Come distinguere tra richieste HTTP e cli?
risposta
http://us3.php.net/manual/en/function.php-sapi-name.php
<?php
echo PHP_SAPI;
echo php_sapi_name();
?>
Vedere le chiavi in $_SERVER. Se si tratta di una richiesta cli, non dovresti vederne alcuna che inizi con "HTTP".
Ecco qualche semplice codice di prova:
<?php
foreach($_SERVER as $k=>$v){
echo "$k: $v\n";
}
?>
Ed ecco l'output:
[email protected]:~/so$ php cli.php |grep HTTP
[email protected]:~/so$
No è necessario un ciclo quando è possibile testare un solo valore. –
@ kemp, la domanda dell'OP ha chiesto specificamente alternative all'argc –
Possibilmente controllando se non $_SERVER['HTTP_HOST']
è impostato? Perché credo che la variabile sia popolata attraverso le intestazioni di richiesta inviate ad un file su exection, e la riga di comando probabilmente non invia le intestazioni.
Ha, entro 1 secondo dall'altra ... –
È possibile verificare se è impostata la variabile globale $argc
.
Suggerisco controllare if(isset($_SERVER['SERVER_NAME']))
Non sono sicuro che questo non sia impostato. Potrebbe, specialmente se stai eseguendo il tuo file PHP da remoto .. –
Penso che l'array $ _SERVER sia riservato alle transazioni HTTP, ma potresti avere ragione. Vale ancora la pena passare attraverso i vari membri in esso in quanto sono sicuro che differiscono tra esecuzione locale e remota. –
Ma è necessario inviare i dati tramite HTTP (TCP) in ogni caso, non importa se lo script viene richiamato da CLI o da un browser
Hai sbagliato. – erenon
Ben fatto, grazie. – erenon
+1 Questa è la strada da percorrere. Ho avuto problemi con il controllo delle variabili $ _SERVER e cose del genere. Questo funziona sempre. –
+1 non sapeva di questa funzione, grazie! –