我一直在研究这个问题超过 12 个小时,但没有成功。
我们有一个为政府客户构建的大型定制 CMS。该软件是在 PHP 5.3.3 上开发的。最初的部署是在 PHP 5.2.2 上完成的,这导致了一些问题,但他们最终将服务器升级到了 PHP 5.3.8。我们几乎无法准确控制将哪些版本部署到他们的服务器上。
我们遇到了一个显示停止器的问题。我们有一个 AJAX 请求,它通过 POST 提交一个大型表单,其中嵌套数组的深度最多为 5 级。这几个月来一直运行良好,但突然使用新的 PHP 安装,我们只获得了 $_POST 变量中数据的部分解码。我已经通过检查 php://input 确认 PHP 收到了所有数据(我还检查了数据是通过 Firebug 从浏览器发送的)。
这是我们收到的解码输出(通过 var_dump,为简洁起见,我将其缩短了,这应该给你一个好主意)
Array
(
[db_required_fields] => Array
(
[awr_title] => Array
(
[en] => phil test eng
)
)
[subtitle_intro] => Array
(
[awr_subtitle] => Array
(
[en] =>
)
)
[products] => Array
(
[cp_recall] => Array
(
[1] => Array
(
[product_common_name] => Array
(
[en] =>
)
)
)
)
)
缺少什么:每个 [en] 都应该有一个 peer [fr] 数组索引条目。例如,应该有一个 [fr] phil test fr 条目。缺少第二个数组级别的其他几个索引条目。请求数据本身并不是特别大,大概6-7Kb。
我所做的: - 我禁用了 suhosin,因为它经常被提及为类似问题的原因。- 仔细研究 phpinfo(); 来自工作和现在工作的服务器,试图找出相关的差异。- 调查可能影响事物的每个模块和选项(例如,mbstring)。
我现在正在考虑为 php://input 数据编写自己的解析器,但这似乎充满了(可能隐藏的)危险。
有什么建议或提示吗?