2015-05-01 12 views
8

Does den folgenden Code sinnvoll ?:

$t_server = isset($_SERVER) ? $_SERVER : $HTTP_SERVER_VARS; 

Wie ich verstehe, $HTTP_XXX_VARS ist das gleiche mit $_XXX, außer $HTTP_XXX_VARS ist veraltet. Daher verstehe ich den obigen Code nicht.

Gibt es einen Fall, in dem zwei Variablen in einem alten System unterschiedlich sind, in dem $HTTT_XXX_VARS nicht als veraltet gilt?

+0

In PHP3 und früher war $ _SERVER nicht vorhanden. Dieser Code möchte offensichtlich auf sehr alten PHP-Installationen funktionieren. – kainaw

+0

@kainaw: gute Annahme, aber isset() ist in PHP4 angekommen. Wahrscheinlich hat der Autor dieser Zeile die Dokumente zu schnell gelesen =) –

+0

@Jeon: Also, wenn Sie diese Zeile korrigieren möchten, können Sie. Dies wird keinen Vorfall haben. Die Dokumente sprechen nicht über Unterschiede von einer Version zur anderen, auch die Kommentare. Dies ist nur eine variable Umbenennung, um konsistenter mit der Nomenklatur der anderen Superglobalen zu sein. –

Antwort

4

$HTTP_SERVER_VARS und $_SERVER sind unterschiedliche Variablen (wenn beide gesetzt sind). Sie enthalten anfänglich die gleichen Werte, unterscheiden sich jedoch von den Änderungen, die das Skript für eines von beiden bewirkt, nicht für das andere.

Die superglobals ($_GET, $_POST, $_SERVER etc) wurden auf PHP 4.1 eingeführt. Die lange benannten Variablen ($HTTP_GET_VARS, $HTTP_SERVER_VARS usw.) wurden auf PHP 4.1 veraltet und sie wurden auf entfernt.

PHP 5.0 eingeführt, um die Konfiguration register_long_arrays Einstellung, die PHP zu sagen, verwendet wurde (oder nicht), die alten Lang benannten Variablen zu erstellen ($HTTP_GET_VARS und der Rest). Die Einstellung wurde auf PHP 5.3 eingestellt und zusammen mit entfernt (zusammen mit den Arrays mit den langen Namen). Wie Sie sehen können, waren zwischen PHP 4.0 und PHP 5.4 eine oder beide Versionen dieser Variablen für den Programmierer verfügbar.

Die Linie:

$t_server = isset($_SERVER) ? $_SERVER : $HTTP_SERVER_VARS; 

nutzt die neuen superglobalen Variable $_SERVER, falls vorhanden (auf PHP >= 4.1), aber es fällt wieder auf die alte $HTTP_SERVER_VARS wenn es auf älteren PHP läuft. Es wurde wahrscheinlich vor Jahren geschrieben, während PHP 4 immer noch auf vielen Servern im Einsatz war.

$t_server = $_SERVER; 

oder nur $_SERVER überall statt $t_server verwenden:

Außer auf dem unwahrscheinlichen Fall, wenn Sie mit PHP 4.0 stecken, können Sie sicher die obige Zeile ändern.

Verwandte Themen