标签: unset

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

我了解 php 和 Web 编程的基础知识。这是我的 php 代码。我见过几个类似的问题。他们使用 unset 函数取消设置全局变量。我希望每次用户打开网址时,都会出现用户名和密码提示,输入用户名密码后,如果正确,则下载文件并删除用户名和密码,如果错误,则删除用户名和密码,并再次提示输入用户名密码。

<?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 …
Run Code Online (Sandbox Code Playgroud)

php global-variables unset

5
推荐指数
1
解决办法
3万
查看次数

在 bash 中使 nameref 成为常规变量

编辑:这已被确认是一个错误并将被修复:https : //lists.gnu.org/archive/html/bug-bash/2018-03/msg00055.html


所以我在搞砸 bash 的间接功能,namerefs。我以为我已经掌握了它的窍门,但是当我试图弄清楚如何将 namerefs 转换为常规变量时,我遇到了一些让我困惑的事情。

这是来自man bash:的相关段落:

declare -n 为每个名称指定 nameref 属性,使其成为对另一个变量的名称引用。另一个变量由 name 的值定义。除了使用或更改 -n 属性本身的那些引用、赋值和属性修改之外,所有对 name 的引用、赋值和属性修改都是在 name 值引用的变量上执行的。


我明白的部分

因此,假设您想取消设置 nameref——不是它指向的变量,而是变量本身。您不能只说unset foo,因为这实际上会取消设置foo指向的任何内容;相反,您必须将其设为常规变量,然后取消设置:

$ declare -p

$ foo=bar; bar='hello world'

$ declare -p
declare -- foo="bar"
declare -- bar="hello world"

$ declare -n foo; declare -p    # 'foo' is now a nameref
declare -n foo="bar"
declare -- bar="hello world"

$ declare +n foo; declare -p    # …
Run Code Online (Sandbox Code Playgroud)

bash indirection unset

5
推荐指数
1
解决办法
2018
查看次数

Smarty:在模板中取消设置数组索引

我想做{unset($array['index'])}一个Smarty 3模板.

是否支持这样的语法(或类似)?谷歌搜索和文档阅读后,我找不到令人满意的东西.

也许我应该向Smarty开发团队索要一个功能请求?:)

无论如何,鉴于目前可用的模板功能,您将如何做到这一点?

php arrays templates smarty unset

4
推荐指数
2
解决办法
2万
查看次数

用define函数销毁定义的键

我怎么能破坏一个常量?我试过unset(KEY),但不行.

<?php
define('KEY', 'value');
echo KEY; //output value
unset( KEY ); //no work
?>
Run Code Online (Sandbox Code Playgroud)

php unset

4
推荐指数
1
解决办法
6243
查看次数

PHP $ _SESSION变量不会取消设置

对不起重复的问题,我在这个论坛上看过其中一些,但没有一个回复对我有用......

我正在使用php会话构建基本登录,我是新来的......

login.php验证html登录表单并开始一个会话,设置变量:$_SESSION['login']$_SESSION['id],

然后每个需要有效登录的页面使用require 'session.php';它来检查$_SESSION['valid']变量并重定向没有正确登录变量的用户.问题是当我注销时,我设置的会话变量都不会被设置.

现在我的logout.php文件使用大约每个方法来销毁我在网上找到的变量,但实际上没有人会这样做.

因此,每当我退出时,我仍然可以访问"私人"页面.

还要注意:我已经尝试了它session_start();没有会话名称ex:这不起作用所以现在我正在使用session_start("user");

另请注意:我不使用cookies.

这是我提到的文件:


的login.php


$email=$_POST['email-log']; $pass=$_POST['password-log'];

$i=-1;

do
{$i++; $path="users/".$i.".json";
$file=  file_get_contents($path);
$x=json_decode($file,true);
} while($x['email']!=$email);
$id=$i;
$truepass=$x['pass'];

$errors=0;
$hash=hash('sha256',$pass);
if($hash != $truepass){$errors=$errors+1;}

if($errors==0){
        session_start("user");
        $_SESSION['login']="valid";
        $_SESSION['id']=$id;

    header('Location: loginlanding.php');}

else{header('Location: front.php?error=y');}
Run Code Online (Sandbox Code Playgroud)

session.php文件


session_start("user"); if($_SESSION['login'] !== "valid") {header('Location: front.php?needto=login');}
Run Code Online (Sandbox Code Playgroud)

logout.php


unset($_SESSION); unset($_SESSION['login']); unset($_SESSION['id']); session_unset("user"); $_SESSION=array(); session_destroy("user"); header('Location: front.php?logged=out');
Run Code Online (Sandbox Code Playgroud)

欢迎任何和所有的回复,我提前感谢你,也请注意,我是一般新登录的人,所以任何加强安全的建议也是值得欢迎的.我打算让它更安全,但首先我需要启动并运行这个基本功能.

php variables session unset

4
推荐指数
2
解决办法
4万
查看次数

当我使用错误?并尝试,错误需要一个价值

这里我的函数执行cmd作为Rebol指令:

exec-cmd: func [
        cmd [ block! ] "Rebol instructions"
        /local err
] [
        if error? err: try [
                do cmd
        ] [ print mold disarm err ]
]
Run Code Online (Sandbox Code Playgroud)

当我启动该函数时,我遇到以下错误消息:

** Script Error: err needs a value
** Where: exec-cmd
** Near: if error? err: try [
    do cmd
]
Run Code Online (Sandbox Code Playgroud)

如何避免此消息并管理错误?

error-handling rebol unset rebol2

4
推荐指数
2
解决办法
122
查看次数

为什么unset()会改变json_encode格式化字符串的方式?

今天我注意到使用unset()和json_decode / json_encode 有趣的事情。这是代码:

echo "<h3>1) array as string</h3>";
$sa = '["item1","item2","item3"]';
var_dump($sa);
echo "<h3>2) array as string decoded</h3>";
$sad = json_decode($sa);
var_dump($sad);
echo "<h3>3) array as string decoded, then encoded again. <small>(Note it's the same as the original string)</small></h3>";
$sade = json_encode($sad);
var_dump($sade);
echo "<h3>4) Unset decoded</h3>";
unset($sad[0]);
var_dump($sad);
echo "<h3>5) Encode unset array. <small>(Expecting it to look like original string minus the unset value)</small></h3>";
$ns = json_encode($sad);
var_dump($ns);
echo "<h3>6) Decode Encoded unset array</h3>";
var_dump(json_decode($ns));
Run Code Online (Sandbox Code Playgroud)

结果: …

php json unset

4
推荐指数
1
解决办法
379
查看次数

从当前函数取消设置所有已定义的变量

例如,我有这个功能:

function foo($whaaaat){

  $var1 = 'a';  
  $a = 1;
  $b = 2;

  ...


  // here unset all variables defined above (including arguments) 
  require 'somefile.php';
}
Run Code Online (Sandbox Code Playgroud)

那么,我可以在需求点之前取消设置所有这些变量吗?

显然没有在每个变量上手动调用unset,因为我想出了自己:)

是否有一些功能可以做到这一点?

php variables function unset

3
推荐指数
2
解决办法
6535
查看次数

jQuery:取消/删除功能事件的最佳实践?

我正在使用jQuery插件Cloud Zoom,并且我已经更改了初始化,以便在用户点击"放大按钮"而不是悬停时缩放图像.我不确定当用户离开图像时如何取消/删除此事件,我很想知道最佳做法是什么.

这就是脚本的样子 -

$('.magnify').click(function() {
    $('.cloud-zoom').CloudZoom({ showTitle: false });
    return false;
});

$('.display').mouseout(function() {
  // unset?
});
Run Code Online (Sandbox Code Playgroud)

(".display"是一个容器)绑定/取消绑定是否必要?它似乎可以解决问题,但我希望有一个更简单的方法,因为它只是一个函数.

jquery reset unset

3
推荐指数
2
解决办法
3516
查看次数

重新排列数组索引Eloquent Laravel

从laravel eloquent数组中删除一个元素后出错

酒店设有客房

foreach ($property->rooms as $key => $room) {
    if ($room->type == 1 and $type ==1 and $room->price < $price->min or $room->price > $price->max) {
            print_r($property->rooms);
            unset($property->rooms[$key]);
            //$array = array_values($property->rooms); doesn't work
            print_r($property->rooms);
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我将其编码为json时,数组将转换为对象而不是数组

在未设置之前

Illuminate\Database\Eloquent\Collection Object
(
[items:protected] => Array
    (
        [0] => Room Object
            (
                [table:protected] => rooms
                [fillable:protected] => Array
                    (
                        [0] => properties_id
                        [1] => price
                        [2] => is_available
                        [3] => type
                        [4] => description
                    )

                [connection:protected] => 
                [primaryKey:protected] => id
                [perPage:protected] => …
Run Code Online (Sandbox Code Playgroud)

php arrays json unset laravel

3
推荐指数
1
解决办法
7144
查看次数