PHP序列化可以在localhost上工作,但不能在webserver上工作

时间:2011-12-19 14:35:56

标签: php phpexcel serializable

我正在开发一个网页,我在html表格中可以看到一些数据。我希望用户能够将数据作为Excel文档进行检索,并且正在使用PHPExcel进行此操作。数据存储在一个数组数组中, array(array first row(first col,...,last col),...,array last row(first col,...,last col))。因此,为了将数据传递给生成excel文件的datatoexcel.php,我将数组序列化并使用POST发送它。

$functiondata = serialize($func[1]);
echo '<form action="datatoexcel.php" name="dataform" method="post">'.
 '<input type=hidden name="functiondata"  value="'.htmlspecialchars($functiondata).'">'.
 '<input type="radio" name="format" value="xls" checked>xls'.
 '<input type="radio" name="format" value="xlsx">xlsx'.
 '</form>';
echo "<a href=\"#\" onclick=\"document['dataform'].submit()\">Export table data</a>";

然后在datatoexcel.php上检索数据:

$serialized_func = $_POST['functiondata'];
$funcdata = unserialize($serialized_func);

这在localhost上非常有效,但是当我在webserver上运行时,$ funcdata似乎没有任何数据。 Localhost使用Apache2和PHP 5.2.17运行Windows 7,Web服务器使用Apache2和PHP 5.2.6运行Linux RedHat 5.2。 PHPExcel正在开发webserver,我尝试在datatoexcel.php中创建一个硬编码数组,并且excel文档结果很好。

2 个答案:

答案 0 :(得分:2)

您是否使用完全相同的输入数据进行测试? 您的本地或远程服务器也启用了magic_quotes吗?这可能 也会干扰您的输入数据。

我认为这可能与使用htmlspecialchars()有关。如果htmlspecialchars()从输入中转换任何字符,那么在反序列化之前必须使用htmlspecialchars_decode($ serialized_func):

反序列化(htmlspecialchars_decode($ serialized_func));

最后,请务必进行设置 的error_reporting(E_ALL);

在脚本开头,您可以通过这种方式捕获一些警告。

答案 1 :(得分:0)

我建议你使用json_encode和json_decode。它像序列化或反序列化,但任何语言都实现它们。