我了解 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) 编辑:这已被确认是一个错误并将被修复: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) 我想做{unset($array['index'])}一个Smarty 3模板.
是否支持这样的语法(或类似)?谷歌搜索和文档阅读后,我找不到令人满意的东西.
也许我应该向Smarty开发团队索要一个功能请求?:)
无论如何,鉴于目前可用的模板功能,您将如何做到这一点?
我怎么能破坏一个常量?我试过unset(KEY),但不行.
<?php
define('KEY', 'value');
echo KEY; //output value
unset( KEY ); //no work
?>
Run Code Online (Sandbox Code Playgroud) 对不起重复的问题,我在这个论坛上看过其中一些,但没有一个回复对我有用......
我正在使用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)
欢迎任何和所有的回复,我提前感谢你,也请注意,我是一般新登录的人,所以任何加强安全的建议也是值得欢迎的.我打算让它更安全,但首先我需要启动并运行这个基本功能.
这里我的函数执行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)
如何避免此消息并管理错误?
今天我注意到使用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)
结果: …
例如,我有这个功能:
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,因为我想出了自己:)
是否有一些功能可以做到这一点?
我正在使用jQuery插件Cloud Zoom,并且我已经更改了初始化,以便在用户点击"放大按钮"而不是悬停时缩放图像.我不确定当用户离开图像时如何取消/删除此事件,我很想知道最佳做法是什么.
这就是脚本的样子 -
$('.magnify').click(function() {
$('.cloud-zoom').CloudZoom({ showTitle: false });
return false;
});
$('.display').mouseout(function() {
// unset?
});
Run Code Online (Sandbox Code Playgroud)
(".display"是一个容器)绑定/取消绑定是否必要?它似乎可以解决问题,但我希望有一个更简单的方法,因为它只是一个函数.
从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)