it-swarm.com.de

Register_globals aktivieren in PHP 5.4

Ich arbeite an einem Framework, das register_globals verwendet. Meine lokale PHP-Version ist 5.4. Ich weiß, dass register_globals seit PHP 5.3.0 DEPRECATED und in PHP 5.4 ENTFERNT ist. Aber ich muss es auf PHP 5.4 klappen lassen. Gibt es eine Möglichkeit? Jegliche Hilfe und Anregungen werden sehr hilfreich sein. Vielen Dank.

12
LX7

Sie können register_globals emulieren, indem Sie extract in globalem scope verwenden:

extract($_REQUEST);

Oder setzen Sie es in eine unabhängige Funktion, indem Sie globale und variable Variablen verwenden. 

function globaling()
    {
    foreach ($_REQUEST as $key => $val)
        {
        global ${$key};
        ${$key} = $val;
        }
    }

P.S. Ich denke, dass Sie Ihre Anwendung freigegeben haben und daran nichts ändern möchten.

Sie können eine globals.php-Datei mit erstellen 

Fügen Sie dann die Direktive auto_prepend_file zu .htaccess hinzu

php_value auto_prepend_file ./globals.php

Danach werden jedem Anruf Globals vorangestellt

24
sectus

Für den Fall, dass es hilfreich sein könnte, ist dies der Code, der auf php.net zur Emulation von register_globals On vorgeschlagen wird:

<?php
// Emulate register_globals on
if (!ini_get('register_globals')) {
    $superglobals = array($_SERVER, $_ENV,
        $_FILES, $_COOKIE, $_POST, $_GET);
    if (isset($_SESSION)) {
        array_unshift($superglobals, $_SESSION);
    }
    foreach ($superglobals as $superglobal) {
        extract($superglobal, EXTR_SKIP);
    }
}

Quelle: http://php.net/manual/de/faq.misc.php#faq.misc.registerglobals

6
Ernesto Allely

Im PHP Handbuch heißt es:

Diese Funktion wurde ab PHP 5.3.0 DEPRECATED und ab PHP 5.4.0 ENTFERNT.

Eine Google-Suche ergab jedoch diese Methode in Ubuntu-Foren :

Nein, jetzt ist es endgültig vorbei. Welche Site auch immer Globals verwendet Hatte ein halbes Dutzend Jahre oder mehr Zeit, um den Code zu korrigieren?

Die schnellste Lösung besteht darin, die Globals durch Ausführen von .__ von Grund auf neu zu erstellen. diesen Code am Anfang der App:

Code: 

foreach ($_REQUEST as $key=>$val) {
    ${$key}=$val;
}

Sie müssen darauf achten, dass auf diese Weise erstellte Variablen nicht bereits im restlichen Skript definiert sind.

Sie können erzwingen, dass dieser Code vor. Jeder Seite auf der Site ausgeführt wird. Verwenden der Direktive auto_prepend_file in einer .htaccess-Datei.

Ich würde dringend empfehlen, sich den Code anzusehen, für den register_globals erforderlich ist, und ihn zu ändern, damit er ordnungsgemäß funktioniert, wenn er deaktiviert wird.

5

In php.ini vorher:

auto_globals_jit = On

Nach dem:

auto_globals_jit = Off
0
user3081809