PHP SimpleXML, CodeIgniter и Apache с Suhosin - PullRequest
2 голосов
/ 04 ноября 2008

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

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

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

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

Я дважды проверил XML, и все нормально.

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

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

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

Ошибка ниже.

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

Неустранимая ошибка: необработанное исключение «Исключение» с сообщением «Строка не может быть проанализирована как XML» в /var/www/ci/system/application/controllers/system.php:49 Трассировка стека: # 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} добавляется в /var/www/ci/system/application/controllers/system.php в строку 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, и все хорошо. Спасибо за указатели, ребята.

Ответы [ 4 ]

2 голосов
/ 04 ноября 2008

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

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

1 голос
/ 04 ноября 2008

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

  • memory_limit
  • post_max_size
  • magic_quotes_gpc
  • max_input_time

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

print_r($_POST);

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

0 голосов
/ 04 ноября 2008

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

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

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

0 голосов
/ 04 ноября 2008

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

...