XAMPP php同时执行if和else部分
真奇怪。我的php代码同时执行if和else部分。下面的代码从尚未设置$\u会话['abc']的位置开始XAMPP php同时执行if和else部分,php,laravel,if-statement,session-variables,Php,Laravel,If Statement,Session Variables,真奇怪。我的php代码同时执行if和else部分。下面的代码从尚未设置$\u会话['abc']的位置开始 //echo $_SESSION['abc']; if(!isset($_SESSION['abc'])){ echo "not showing this echo"; $_SESSION['abc'] = "new"; } else { echo " why it jumps here, in XAMPP?"; } 我的实际代码更复杂,所以我做得更简单,如上所述。上述代码没有
//echo $_SESSION['abc'];
if(!isset($_SESSION['abc'])){
echo "not showing this echo";
$_SESSION['abc'] = "new";
} else {
echo " why it jumps here, in XAMPP?";
}
我的实际代码更复杂,所以我做得更简单,如上所述。上述代码没有回显“未显示此回显”;即使未设置$\u会话['abc']。如果我注释掉语句$\u SESSION['abc']=“new”代码>它回显“不显示此回显”
我现在发现:
这只发生在XAMPP中,在生产服务器上,同样工作正常
当我在if块中使else条件为真时,就会发生这种情况。这个条件是设置一个会话变量
我自己认为代码执行了两次或更多,但事实并非如此
更重要的是,“if”条件为true,如果您取消注释第一行echo$\u会话['abc']代码>,它将显示未定义的索引错误
对我来说,最奇怪的感觉是,当它到达$\u会话['abc']=“new”代码>在“if”块中,它跳到“else”,忽略它前面的回显行
奇怪!!是我遗漏了什么,还是它是一个XAMPP错误。是的,代码在生产服务器上按预期工作
编辑:
我想补充一点,仅针对这种行为,我还重新安装了XAMPP(最新版本)。
至于“如何知道它是否设置了会话变量,而不回显它前面的行”,它将打印echo$\u session['abc'”代码>在else块中,但如果我取消注释第一行echo$\u会话['abc'],它将显示未定义的索引错误代码>
在else块中添加了回显行的代码
//echo $_SESSION['abc'];
if(!isset($_SESSION['abc'])){
echo "not showing this echo";
$_SESSION['abc'] = "new";
} else {
echo " why it jumps here, in XAMPP?";
echo $_SESSION['abc'];
}
更新2018-06-03
我在拉威尔做上面的代码。我在一个普通的PHP文件中尝试了上述Laravel框架中的代码,它在XAMPP中正常工作。所以新的信息是,这在Laravel-XAMPP组合中不起作用。版本:Laravel 5.4和XAMPP 7.2.5
现在???我不确定你想要实现什么。在将值分配给会话密钥之前,您似乎正在测试$\u会话
执行打印($会话)以在指定值时变得清晰。以及重新加载会话后存储的值。您还可以打印出语句以查看结果,例如echo(!isset(value))
session_start ();
print_r ($_SESSION);
if (!isset ($_SESSION ['whatever'])){
echo "not set";
print_r ($_SESSION);
}
else {
echo "set";
print_r ($_SESSION);
}
另外,如果在else块中设置并分配新值,请尝试将第一条语句更改为true
session_start ();
print_r ($_SESSION);
if (isset ($_SESSION ['whatever'])){
echo "set";
print_r ($_SESSION);
}
else {
echo "not set";
print_r ($_SESSION);
$_SESSION['whatever'] = "new value";
}
希望它有助于找到错误的地方
编辑
一定要使用
session\u start()
在第一线
或设置
session.auto\u start=1
在您的php.ini中确实不清楚问题出在哪里。标题上写着“同时执行if和else部分”,但是你说“上面的代码没有回音”没有显示这个回音“。那么它是否同时执行两个分支呢?该代码的实际输出是什么?首先它达到$\u会话['abc']=“new”
并设置会话变量,然后跳转到else部分。因此,它同时执行这两个部分,尽管它没有回显if块回显…如果它没有打印任何内容,您如何知道它设置了会话?它几乎不可能以某种方式跳过回显行,但在同一块中执行下一行。@JJJ它会在else块中或之后打印会话变量,但不会在if else之前打印。我在上面的代码中添加了新行。是的,我相信这是不可能的,所以我问这个是为了了解它,否则我的代码已经在生产中运行了。XAMPP出了什么问题?@Asghar如果你是在laravel做这件事,你必须提供完整的代码。这似乎不是一个奇怪的行为,似乎您提供的代码与框架配合得不好。请比较(Localhost、Remote)所有预设(PHP.ini、framework vars等),并检查是否在服务器上部署了正确的代码。还可以在框架或PHP中启用错误报告。如果它不起作用,你必须提供更多的细节。谢谢<代码>回显
在之前,如果else
已经存在echo
也已经过测试,并添加到问题中。请参考编辑部分。代码实际上是在线工作的,但不是在XAMPP上。请检查PHP.ini设置和PHP版本,以了解不同之处。另外,当您提供设置时,我可以在XAMPW上重新测试它,但我不确定:在处理$会话时,您是否在第一行使用session_start()?是@Michael I。请检查我在您撰写此评论时所做的更新。您正在使用最新的适用于windows的xampp版本。PHP7.2?