2

我环顾四周,但找不到对我的 $_SESSION 变量中发生的事情的解释。

@ob_start();
$k=@ob_get_contents();
@ob_end_clean();
@session_start();
unset($s,$m);
$m1 = explode(" ", microtime());
$stime = $m1[1] + $m1[0];
echo $k;

$_SESSION['resendConfirmation']['function'] = 'resend';
$_SESSION['resendConfirmation']['id'] = '8';                

print_r($_SESSION);

输出:

Array ( [resendConfirmation] => 8esend ) 

为什么要替换字符串?我以前从来没有遇到过这个问题。

我想要的是:

Array([resendConfirmation] => Array(
                             [id] =>8
                             [function} => resend
                             )
)

我从来没有遇到过这种情况,我完全糊涂了!

更新 作为对@DanRedux 的回应,我已更改为两个不存在的变量名称以将引用排除在等式之外,结果仍然相同...

$_SESSION['resendConfirmation']['tweak'] = 'resend';
$_SESSION['resendConfirmation']['tweak2'] = '8';

结果相同:(

是否进行了站点范围的查询resendConfirmation,但没有找到,但是一旦我更改了该数组名称,这一切都有效,令人困惑,但已修复...

$_SESSION['reConfirm']['function'] = 'resend';
$_SESSION['reConfirm']['id'] = '8';             

print_r($_SESSION);
4

2 回答 2

6

您认为的多维数组实际上并非如此。真正发生的是:

你认为的数组实际上是一个字符串。之后,您尝试将字符串作为数组访问。您正在尝试访问id不存在的元素。PHP 总是试图变得比它应该的更聪明,只是说:好的,我假设你的意思是第一个索引。所以基本上发生的事情是:

<?php
$notAnArray = 'somestring';
$notAnArray['id'] = '8'; 

var_dump($notAnArray); // 8omestring

这就是您应该始终在您的开发机器上启用 error_reporting的原因:

error_reporting(E_ALL | E_STRICT);
ini_set("display_errors", 1);

并且永远不要使用@. 好吧,在某些情况下您可以使用@,但这确实不是其中之一。

于 2012-05-10T19:21:33.273 回答
6

因为我真的不知道代码在你给我们的这个块之外还有什么其他类型的恶作剧,所以我想说试试这个:

$_SESSION['resendConfirmation'] = array('id' => 8, 'function' => 'resend');

如果这也失败了,那么在您发布的内容之外必须有其他事情发生。祝你好运!

于 2012-05-10T19:22:05.973 回答