2010-01-31 25 views
10

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

12

http://us3.php.net/manual/en/function.php-sapi-name.php

<?php 
echo PHP_SAPI; 
echo php_sapi_name(); 
?> 
+1

Ben fatto, grazie. – erenon

+0

+1 Questa è la strada da percorrere. Ho avuto problemi con il controllo delle variabili $ _SERVER e cose del genere. Questo funziona sempre. –

+0

+1 non sapeva di questa funzione, grazie! –

2

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$ 
+0

No è necessario un ciclo quando è possibile testare un solo valore. –

+0

@ kemp, la domanda dell'OP ha chiesto specificamente alternative all'argc –

1

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.

+0

Ha, entro 1 secondo dall'altra ... –

0

È possibile verificare se è impostata la variabile globale $argc.

0

Suggerisco controllare if(isset($_SERVER['SERVER_NAME']))

+0

Non sono sicuro che questo non sia impostato. Potrebbe, specialmente se stai eseguendo il tuo file PHP da remoto .. –

+0

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. –

0

Ma è necessario inviare i dati tramite HTTP (TCP) in ogni caso, non importa se lo script viene richiamato da CLI o da un browser

+0

Hai sbagliato. – erenon

Problemi correlati