2008-11-04 23 views
2

我有我在PHP5寫,使用CodeIgniter的框架的應用程序。我有它在Windows(使用Xampp)和Ubuntu(使用標準的Apache,PHP,MySQL堆棧)上運行。PHP的SimpleXML,笨和Apache時使用了Suhosin

我有一個表單,需要XML,解析它(使用simpleXML)並將結果發佈到數據庫中。

在Windows上 - 沒有問題,按預期工作。

在Linux上 - 大問題。它出錯了。

我有雙重檢查的XML,它的罰款。

我刪除了大量的XML,而且它似乎是確定。

我認爲這與從表單發佈的XML字符串的大小有關,但我不確定。再次,在Windows上,它是可以的 - 在Linux上,它出錯了。

發佈在表單中的數據大小約爲160k(是的,這是很多文本,但它是自動的 - 它最終將大約200k)。

錯誤在下面。

任何幫助非常感謝。

Fatal error: Uncaught exception 'Exception' with message 'String could not be parsed as XML' in /var/www/ci/system/application/controllers/system.php:49 Stack trace: #0 /var/www/ci/system/application/controllers/system.php(49): SimpleXMLElement->__construct('') #1 [internal function]: 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} thrown in /var/www/ci/system/application/controllers/system.php on line 49

線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,並且都很好。感謝指針傢伙。

回答

0

您可能已經嘗試過這種做法,但你檢查的行尾? \ r \ n(DOS)而不是\ n(UNIX)?這可能是simpleXML使用的正則表達式可能會讓他們在不同的平臺上感到困惑...

+0

SimpleXML的不關心使用的行尾。 $ A1 = 「 \ n \ r \ n \ r」; – 2008-11-04 11:41:03

+0

$ x = new SimpleXmlElement($ a1); print_r($ x); SimpleXMLElement對象 ( [TAG1] => SimpleXMLElement對象 ( [TAG2] => SimpleXMLElement對象 ( [0] => ) ) ) – 2008-11-04 11:41:41

+0

不錯的嘗試。在Windows中生成XML字符串_is_,所以我在Ubuntu中替換了所有行結束符(unix2dos -u -o filename)。沒有區別。 – 2008-11-04 11:45:25

1

請檢查您的PHP配置,並將其與Windows設置進行比較。尤其是以下設置:

  • memory_limit的
  • 的post_max_size
  • magic_quotes_gpc的
  • max_input_time設置

也許你可以做發佈到腳本

print_r($_POST); 

數據的轉儲看我有什麼數據真的進入服務器。

0

更新 - 發現這個syslog中

11月4日21點53分32秒ubu804了Suhosin [7944]:ALERT - 配置請求變量值長度超出限制 - 下降變量 'form_systemXML'(攻擊者127.0.0。1',文件'/var/www/ci/index.php')

現在我正在看apache配置。