如何在php中取消设置全局变量?

时间:2014-09-12 21:09:16

标签: php global-variables unset

我非常了解php和网络编程。这是我的PHP代码。我见过几个类似的问题。他们通过未设置功能取消设置全局变量。我希望每次用户打开网址,用户名和密码提示,输入用户名密码后如果正确下载文件并删除用户名和密码,如果错误,请删除用户名和密码,然后再提示输入用户名密码。

<?php    
    function destroy_foo()
    {
        if (isset($_SERVER['PHP_AUTH_USER'])) {
            unset($_SERVER['PHP_AUTH_USER']);       
        }
        if (isset($_SERVER['PHP_AUTH_PW'])) {
            unset($_SERVER['PHP_AUTH_PW']);
        }
    }

    if (!isset($_SERVER['PHP_AUTH_USER'])) {

        header('WWW-Authenticate: Basic realm="My Realm"');
        header('HTTP/1.0 401 Unauthorized');
        echo 'Text to send if user hits Cancel button';
        exit;
    } else {

        echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
        echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";

        $file = 'welcome.txt';
        if($_SERVER['PHP_AUTH_PW'] == "admin" && $_SERVER['PHP_AUTH_USER'] =="admin"){
            destroy_foo();

            if (file_exists($file)) {

               //Do some task
                destroy_foo();
                exit;
            }
        }
        else
        {
            //Do some task
            destroy_foo();

        }
    }
    ?>

目前,由于某种原因,用户名和密码会保留在全局变量中。如果你能给出建议或提示,我将不胜感激。

修改

这也不起作用:

function destroy_foo()
{

    if (isset($_SERVER['PHP_AUTH_USER'])) {

        unset($_SERVER['PHP_AUTH_USER']);
        $_SERVER['PHP_AUTH_USER'] = null;

    }

   if (isset($_SERVER['PHP_AUTH_PW'])) {

       unset($_SERVER['PHP_AUTH_PW']);
       $_SERVER['PHP_AUTH_PW'] = null;

   }
}

链接到文件:http://behzadgarekani.net16.net/

3 个答案:

答案 0 :(得分:1)

使用 $GLOBALS

$ GLOBALS - 引用全球范围内可用的所有变量

说明¶

一个关联数组,包含对当前在脚本全局范围内定义的所有变量的引用。变量名是数组的键。

您可以将其用作

unset($GLOBALS[_SERVER]);

答案 1 :(得分:1)

我认为你使用unset()函数做得很好,但我看到一些无序的代码。 我认为通过这种方式你可以做到你想要的那样:

function destroy_foo() {
    if(isset($_SERVER['PHP_AUTH_USER']))
        unset($_SERVER['PHP_AUTH_USER']);       

    if (isset($_SERVER['PHP_AUTH_PW']))
        unset($_SERVER['PHP_AUTH_PW']);
}

if(isset($_SERVER['PHP_AUTH_USER']) && $_SERVER['PHP_AUTH_USER']=='admin' && isset($_SERVER['PHP_AUTH_PW']) && $_SERVER['PHP_AUTH_PW']=='admin') {
    //download the file

    destroy_foo();
} else {
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    echo 'Text to send if user hits Cancel button';
}

答案 2 :(得分:0)

将它们设为null

How to unset global variables.