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
- 1. distinguere tra 0 e ""
- 2. Distinguere tra applicationDidEnterBackground e applicationWillTermimate
- 3. Come distinguere tra iphone4 e iphone 3
- 4. Come distinguere tra programmatore e JVM eccezioni
- 5. UIDeviceOrientationFaceUp - come distinguere tra verticale e orizzontale?
- 6. RestKit: distinguere più richieste in didLoadResponse:
- 7. È possibile distinguere le richieste HTTP effettuate via 3G da altre richieste
- 8. Distinguere richieste Ajax da richieste complete nel validatore personalizzato JSF
- 9. Richieste HTTP e intestazioni querystring vs?
- 10. Distinguere tra intranet e indirizzi IP ufficiali
- 11. Distinguere tra cartelle e file in C++
- 12. Python: come distinguere tra errore di socket e timeout?
- 13. Come condividere la memoria tra richieste HTTP in PHP?
- 14. Distinguere tra iPhone 4 e iPhone 4S
- 15. Come distinguere tra il logout e la sessione scaduta?
- 16. Come distinguere tra Vista SP1 e Server 2008 all'installazione
- 17. Come distinguere tra collezioni NodeList live e non live?
- 18. Come faccio a distinguere tra file "binari" e "testo"?
- 19. Come distinguere tra una sequenza e una mappatura
- 20. Come distinguere tra un iteratore e un iterabile?
- 21. Java: Come distinguere tra wakeful spurio e timeout in attesa()
- 22. Come distinguere tra diverse reti wifi?
- 23. Traccia richieste HTTP
- 24. richieste http con PowerShell
- 25. Archiviare e inoltrare richieste HTTP con tentativi?
- 26. Volley: richieste HTTP lente
- 27. Mappatura delle richieste HTTP alle risposte HTTP
- 28. Differenza tra piping HTTP e multiplexing HTTP con SPDY
- 29. differenza tra HTTP 1.1 e HTTP 2.0
- 30. Come fare richieste HTTP parallele in Heroku?
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! –