Search code examples
phpregister-globals

How can I emulate register_globals in PHP 5.4 or newer?


I am working on a framework that uses register_globals. My local php version is 5.4.

I know register_globals is deprecated since PHP 5.3.0 and removed in PHP 5.4, but I have to make this code work on PHP 5.4.

Is there any way to emulate the functionality on newer versions of PHP?


Solution

  • You can emulate register_globals by using extract in global scope:

    extract($_REQUEST);
    

    Or put it to independent function using global and variable variables

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

    If you have a released application and do not want to change anything in it, you can create globals.php file with

    <?php
    extract($_REQUEST);
    

    then add auto_prepend_file directive to .htaccess (or in php.ini)

    php_value auto_prepend_file ./globals.php
    

    After this the code will be run on every call, and the application will work as though the old setting was in effect.