PHP SimpleXML, CodeIgniter и Apache с Suhosin

У меня есть приложение, которое я пишу на PHP5, используя фреймворк CodeIgniter. У меня он работает как в Windows (с использованием Xampp), так и в Ubuntu (с использованием стандартного стека Apache, PHP, MySQL).

У меня есть форма, которая принимает XML, анализирует его (используя simpleXML) и отправляет результаты в базу данных.

На Windows - без проблем, работает как задумано.

На Linux - большая проблема. Это ошибки.

Я дважды проверил XML, и все в порядке.

Я удалил большую часть XML, и, похоже, все в порядке.

Я думаю, это связано с размером XML-строки, отправляемой из формы, но я не уверен. Опять же, в Windows все нормально - в Linux выдает ошибки.

Размер данных, размещаемых в форме, составляет ~ 160 КБ (да, это много текста, но он автоматизирован - И в конечном итоге он будет около 200 КБ).

Ошибка ниже.

Любая помощь очень ценится.

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, и все в порядке. Спасибо за указатели, ребята.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
4 114
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Возможно, вы уже пробовали этот подход, но проверяли ли вы окончания строк? \ r \ n (DOS) в отличие от \ n (UNIX)? Может случиться так, что регулярные выражения, которые использует simpleXML, могут быть запутаны ими на разных платформах ...

SimpleXML не заботится об используемых окончаниях строк. $ a1 = "<root> \ n <tag1> \ r \ n <tag2> \ r </tag2> </tag1> </root>";

Stefan Gehrig 04.11.2008 14:41

$ x = новый SimpleXmlElement ($ a1); print_r ($ x); Объект SimpleXMLElement ([tag1] => Объект SimpleXMLElement ([tag2] => Объект SimpleXMLElement ([0] =>)))

Stefan Gehrig 04.11.2008 14:41

Хорошая попытка. XML-строка является сгенерирована в Windows, поэтому я заменил все окончания строк (unix2dos -u -o filename) в Ubuntu. Без разницы.

Mark Unwin 04.11.2008 14:45

Пожалуйста, проверьте свою конфигурацию PHP в окне Linux и сравните ее с настройками Windows. Особенно следующие настройки:

  • memory_limit
  • post_max_size
  • magic_quotes_gpc
  • max_input_time

Возможно, вы сможете сделать дамп данных, отправленных в скрипт

print_r($_POST);

чтобы увидеть, какие данные действительно поступают на сервер.

memory_limit: linux 16m, Windows 32m post_max_size: linux 8m, Windows 16m Необходимо изменить настройки linux и посмотреть, что произойдет.

Mark Unwin 04.11.2008 14:48

Блин - обновил и перезапустил Apache (и дважды проверил с помощью phpinfo ()) - без изменений. Та же ошибка.

Mark Unwin 04.11.2008 14:51

Пытался добавить print_r ($ _ POST), но все, что вернулось, было Array ([submit] => Submit) вместе с существующим сообщением об ошибке. Должна быть переменная для "form_systemXML". Не уверен ... может быть, конфиг apache?

Mark Unwin 04.11.2008 14:54

Я сократил ввод XML с 2870 строк до 990. Работал нормально. Уверена, это связано с размером ...

Mark Unwin 04.11.2008 14:56

Обновление - нашел это в системном журнале

4 ноября 21:53:32 ubu804 suhosin [7944]: ALERT - превышен предел длины настроенного значения переменной запроса - удалена переменная 'form_systemXML' (злоумышленник '127.0.0.1', файл '/var/www/ci/index.php')

Сейчас смотрю конфигурацию apache.

Ответ принят как подходящий

Похоже, вы используете расширение Сухосин PHP. См. Документацию по настройке по адресу: http://www.hardened-php.net/suhosin/configuration.html.

Соответствующий вариант кажется (я никогда не использовал расширение Suhosin): suhosin.post.max_value_length и / или suhosin.request.max_value_length

Другие вопросы по теме