反序列化不在生产服务器上运行,适用于localhost

时间:2012-12-28 13:33:01

标签: php serialization

我通过查询字符串传递序列化数据

$msg = $nos.' of '.$recordsExtracted.' records imported';
header('Location: ../import-to-master.php?msg='.serialize($msg));

我使用以下内容来捕获数据

if(isset($_GET['msg']))
{
    $msg=unserialize($_GET['msg']);
}

在localhost上,在回显$msg时,消息将显示在屏幕上。

但是在生产服务器上,虽然该消息在URL中可见

import-to-master.php?msg=s:23:"5 of 5 records imported";

回显$msg不会显示任何内容。为了确保正在处理$msg,我在其中添加了一个类似

的字符串
$msg .= 'sdage';

在刷新页面时,我在页面上看到了sdage。所以这意味着unserialize无法在服务器上运行。

我的第一个想法可能是生产服务器的PHP版本不支持unserialize,但版本为5.2,支持serializeunserialize

我想知道问题可能是什么。

PS:是的,我没有考虑转义数据,但我现在的首要任务是解决当前问题,然后从查询字符串中获取安全输入。

1 个答案:

答案 0 :(得分:1)

经过一系列的试验和错误后,我用

解决了这个问题
if(isset($_GET['msg']))
{
    $msg=unserialize(stripslashes($_GET['msg']));
}