PHP序列化在本地主机上可以工作,但在webserver上不行

问题描述 投票:3回答:3

我正在做一个网页,其中有一些数据用html表格可视化。我希望用户能够以Excel文档的形式检索数据,为此我使用了PHPExcel。数据存储在一个数组中,数组(数组第一行(第一列,...,最后一列),...,数组最后一行(第一列,...,最后一列))。因此,为了将数据传递给制作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);

这在本地主机上工作得很好,但是当我在webserver上运行时,$funcdata似乎没有任何数据。本地主机运行Windows 7,使用Apache2和PHP 5.2.17,webserver运行Linux RedHat 5.2,使用Apache2和PHP 5.2.6。PHPExcel在web服务器上工作,我试着在datatoexcel.php中创建了一个硬编码数组,excel文档的结果很好。

php phpexcel serializable
3个回答
2
投票

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

我想这可能与使用htmlspecialchars()有关。如果htmlspecialchars()转换了任何输入的字符,那么你必须在未序列化之前使用htmlspecialchars_decode($serialized_func)。

unserialize(htmlspecialchars_decode($serialized_func))。

最后,确保在脚本开始时设置error_reporting(E_ALL)。

在你的脚本的开始,你可能会发现一些警告。


0
投票

我建议你使用json_encode和json_decode。它就像serialize或unserialize一样,但任何语言都可以实现它们。

© www.soinside.com 2019 - 2024. All rights reserved.