2

我有一个使用 CodeIgniter 框架用 PHP5 编写的应用程序。我让它在 Windows(使用 Xampp)和 Ubuntu(使用标准 Apache、PHP、MySQL 堆栈)上运行。

我有一个表单,它接受 XML,解析它(使用 simpleXML)并将结果发布到数据库中。

在 Windows 上 - 没问题,按预期工作。

在 Linux 上 - 大问题。它出错了。

我已经仔细检查了 XML,这很好。

我删除了大量的XML,似乎还可以。

我认为这与从表单发布的 XML 字符串的大小有关,但不确定。同样,在 Windows 上没问题 - 在 Linux 上,它会出错。

表格中发布的数据大小约为 160k(是的,这是很多文本,但它是自动化的 - 最终将达到 200k 左右)。

错误如下。

非常感谢任何帮助。

致命错误:在 /var/www/ci/system/application/controllers/system.php:49 中未捕获的异常“异常”和消息“字符串无法解析为 XML” 堆栈跟踪:#0 /var/www/ci/ system/application/controllers/system.php(49): SimpleXMLElement->__construct('') #1 [内部函数]: System->add_system() #2 /var/www/ci/system/codeigniter/CodeIgniter.php (233): call_user_func_array(Array, Array) #3 /var/www/ci/index.php(115): require_once('/var/www/ci/sys...') #4 {main} 抛出 /第 49 行的 var/www/ci/system/application/controllers/system.php

第 49 行如下所示:

$xml = new SimpleXMLElement($this->input->post('form_systemXML'));

编辑 - 固定

发现问题。Suhosin 安装在 Ubuntu 上。在文件 /etc/php5/apache2/conf.d/suhosin.ini 中,我启用了该行suhosin.post.max_value_length = 65000并将值更改为 195000。重新启动 Apache,一切正常。谢谢各位指点。

4

4 回答 4

2

您似乎正在运行Suhosin PHP 扩展。请查看配置文档:http ://www.hardened-php.net/suhosin/configuration.html 。

相关选项似乎是(我从未使用过 Suhosin 扩展): suhosin.post.max_value_length/或suhosin.request.max_value_length

于 2008-11-04T12:13:05.390 回答
1

请检查您在 Linux 机器上的 PHP 配置,并将其与您的 Windows 设置进行比较。特别是以下设置:

  • 内存限制
  • post_max_size
  • magic_quotes_gpc
  • 最大输入时间

也许您可以转储发布到脚本的数据

print_r($_POST);

查看真正进入服务器的数据。

于 2008-11-04T11:28:06.590 回答
0

您可能已经尝试过这种方法,但是您检查了行尾吗?\r\n (DOS) 而不是 \n (UNIX)?可能是simpleXML使用的正则表达式可能会在不同的平台上被它们混淆......

于 2008-11-04T11:24:58.857 回答
0

更新 - 在系统日志中找到了这个

11 月 4 日 21:53:32 ubu804 suhosin[7944]:警报 - 超出了配置的请求变量值长度限制 - 删除了变量“form_systemXML”(攻击者“127.0.0.1”,文件“/var/www/ci/index.php”)

我现在正在查看 apache 配置。

于 2008-11-04T12:01:19.143 回答