web-dev-qa-db-fra.com

Activer register_globals dans PHP 5.4

Je travaille sur un framework qui utilise register_globals. Ma version php locale est 5.4. Je sais que register_globals est déprécié depuis le PHP 5.3.0 et supprimé dans le PHP 5.4. Mais je dois le faire fonctionner sur PHP 5.4, y a-t-il un moyen? Toute aide ou suggestion sera très appréciable. Merci.

12
LX7

Vous pouvez émuler register_globals en utilisant extract in global scope :

extract($_REQUEST);

Ou mettez-le en fonction indépendante en utilisant des variables globales et variables

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

P.S. Je pense que vous avez publié une application et que vous ne voulez rien y changer.

Vous pouvez créer un fichier globals.php avec 

Puis ajoutez auto_prepend_file directive à .htaccess

php_value auto_prepend_file ./globals.php

Après cela, les globaux seront ajoutés à chaque appel

24
sectus

Juste au cas où cela pourrait être utile, voici le code suggéré sur php.net pour émuler register_globals sur:

<?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);
    }
}

Source: http://php.net/manual/en/faq.misc.php#faq.misc.registerglobals

6
Ernesto Allely

Dans le manuel PHP , il est indiqué que:

Cette fonctionnalité a été DEPRECÉE à partir de PHP 5.3.0 et SUPPRIMÉE à partir de PHP 5.4.0.

Cependant, une recherche Google a révélé cette méthode sur Forums Ubuntu :

Non, c'est finalement parti pour de bon. Quel que soit le site qui utilise encore les globals a eu quoi, un demi-douzaine d'années ou plus maintenant pour corriger le code?

La solution la plus rapide consiste à créer les globales à partir de zéro en exécutant ce code au début de l'application:

Code: 

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

Vous devez faire attention à ce que toute variable créée de cette manière ne soit pas déjà définie dans le reste du script.

Vous pouvez forcer ce code à être exécuté avant chaque page du site par en utilisant la directive auto_prepend_file dans un fichier .htaccess.

Je vous recommande vivement de consulter le code qui nécessite register_globals et de le modifier afin qu'il fonctionne correctement et qu'il est désactivé.

5
rink.attendant.6

Dans php.ini avant:

auto_globals_jit = On

Après:

auto_globals_jit = Off
0
user3081809