if ($delete_one == null && $delete_two == null && $delete_three == null) {
echo "THE CONTENT SHOULD BE GRABED ONCE";
$arr = array("foo" => "bar", 12 => "one");
echo $arr["foo"];
echo $arr[12];
$serialize_arr = serialize($arr);
setcookie("test", $serialize_arr);
}
else
{
echo " THIS PART WORKS! ";
$arr_ser = $_COOKIE["test"];
$arr = unserialize($arr_ser);
var_dump(arr_ser);
var_dump($arr);
if ($arr == null) {
echo " Why is there nothing in here?? ";
}
else
{
echo "There is something in this array!";
}
}
当未使用 $delete_one、两个或三个元素时,并且当用户提交表单时,这些元素之一发生变化,从而完成 else 语句,则会设置 cookie。 cookie 被带回,var_dump(arr_ser) 将显示它并显示序列化数组。但是反序列化不起作用。这是错误的,我不确定为什么反序列化不起作用。
我已经尝试过 Raisen 所说的内容,并浏览了 PHP 手册,并尝试模仿示例中显示的内容。我创建了两个 if 语句,第二个是示例的副本,另一个稍作更改以将其他内容放入数组中。该示例有效,但我所做的更改无效。注意:我在 WordPress 后端使用它来创建插件。
if ($delete_one == null && $delete_two == null && $delete_three == null) {
$arr [foo] = "bar";
$arr [boo] = "one";
$serialize_arr = gzcompress(serialize($arr), 9);
setcookie("test", $serialize_arr, time()+60*60*24*60, '/');
}
else
{
if(isset($_COOKIE[test])) {
$array = unserialize(gzuncompress($_COOKIE[test]));
echo "<pre>";
print_r($array);
echo "</pre>";
}
}
if ($delete_one == null && $delete_two == null && $delete_three == null) {
$data[qwerty] = "blah";
$data[1][a] = "1aa";
$data[2][b] = "2bb";
$data[3][c] = ";;;;;;";
$data[name][first] = "Bob";
$data[name][last] = "Jones";
$data[val] = "This is a real long test string, to see how well the compression works!";
$string = gzcompress(serialize($data), 9);
setcookie("my_var", $string, time()+60*60*24*60, '/');
}
else
{
if(isset($_COOKIE[my_var])) {
$array = unserialize(gzuncompress($_COOKIE[my_var]));
echo "<pre>";
print_r($array);
echo "</pre>";
}
}
内容不会反序列化,因此 gzuncompress 有数据错误。
最佳答案
您遇到的问题非常简单,并在您的评论中显示:
I've confirmed that the gzcompress was creating the gibberish. The var_dump($arr_ser); now returns string(54) "a:2:{s:3:\"foo\";s:3:\"bar\";s:3:\"boo\";s:3:\"one\";}"
您已打开 magic_quotes_runtime 和/或 magic_quotes_gps。 cookie 的值已通过 AddSlashes() 运行,因此不再是有效的序列化对象。简单的修复方法是禁用这些选项,或更改此行:
$arr_ser = $_COOKIE["test"];
对此:
$arr_ser = StripSlashes($_COOKIE["test"]);
关于php - 尝试在 php 中反序列化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5671379/