Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Текст в $_POST автоматом обрезается до первого знака "<"
Форумы портала PHP.SU » » Работа с сетью » Текст в $_POST автоматом обрезается до первого знака "<"

Страниц (1): [1]
 

1. rame0 - 14 Июня, 2013 - 18:35:34 - перейти к сообщению
Возникла следующая проблемка:
Есть форма редактирования конфига админки. Там идет обычный PHP'шный код - define'ы и т.п.
Переношу эту админку на сервер. В итоге, при сохранении конфига через эту форму весь файл затирается.
Оказалось, что хотя форма и заполнена, в $_POST данные этого поля не пропускаются.
Долго искал причину этого всего.
Нашел. Где то между тем как был отправлен POST запрос с сайта и данные были записаны в $_POST, значения переменных обрезаются до первого вхождения знака "<".

При этом, на ВДС с такой же конфигурацией работает стабильно другой сайт с такой же админкой.
Единственное отличие - первый сайт (там где не пашет) в кодировке UTF-8, а второй в windows-1251.

Кто то сталкивался с подобным приколом?

Для большей ясности приведу пример:
Данные формы (сразу напишу, что в качестве "enctype" пробовал все возможные варианты):

CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. <form action="action.php" method="post" name="form1" enctype="multipart/form-data">
  3.         <input type="submit" value="Ok">
  4.         <input name="id" type="hidden" value="0">
  5.         <textarea name="content"><?php
  6. define('HOME',$_SERVER['DOCUMENT_ROOT'].'/');
  7. define('DEBUG', false);
  8. ....
  9. ....
  10. ....
  11. ?>
  12. </textarea>
  13.     </form>
  14.  


После сабмита формы, в $_POST имеем следующее:



Теперь добавим в самое начало текста конфига всякий мусор и получаем следующее:
PHP:
скопировать код в буфер обмена
  1.  
  2. asdf"asf asdfsdaf$sa&dfsdafa?> <?PHP
  3. define('HOME',$_SERVER['DOCUMENT_ROOT'].'/');
  4. define('DEBUG', false);
  5. ....
  6. ....
  7. ....
  8. ?>
  9.  


После сабмита формы, в $_POST получаем:
PHP:
скопировать код в буфер обмена
  1.  
  2. Array ( [id] => 0 [content] => asdf"asf asdfsdaf$sa&dfsdafa?> )
  3.  


PS:
Версия PHP 5.4.15
Магические ковычки в нем убрали, но в htaccess на вякий случай все равно прописано:
CODE (htaccess):
скопировать код в буфер обмена
  1. php_flag magic_quotes_gpc Off
  2. php_flag magic_quotes_runtime Off
  3. php_flag magic_quotes_sybase Off
2. caballero - 14 Июня, 2013 - 19:01:10 - перейти к сообщению
Цитата:
Кто то сталкивался с подобным приколом?

почти все

Он знак < считает началом закрытия тэга textarea

нужно его заменять на &lt; или как то там
3. rame0 - 14 Июня, 2013 - 19:10:59 - перейти к сообщению
caballero пишет:
Цитата:
Кто то сталкивался с подобным приколом?

почти все

Он знак < считает началом закрытия тэга textarea

нужно его заменять на &lt; или как то там


Естественно, это было первое что я проверил Улыбка
Перед выводом в textarea все это обрабатывается htmlspecialchars($text).

В итоге в коде вот такой текст:
&lt;?php

define('HOME',$_SERVER['DOCUMENT_ROOT'].'/');
define('DEBUG', false);
(Добавление)
Забыл написать:
Проверял Fiddler'ом что уходит на сервер.
Все данные формы уходят корректно.

Текст уходящего от браузера POST запроса:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. ------WebKitFormBoundaryRYwV0h3XUa4yf1mo
  3. Content-Disposition: form-data; name="id"
  4.  
  5. 0
  6. ------WebKitFormBoundaryRYwV0h3XUa4yf1mo
  7. Content-Disposition: form-data; name="content"
  8.  
  9. <?php
  10.  
  11. define('HOME',$_SERVER['DOCUMENT_ROOT'].'/');
  12. define('DEBUG', false);
  13.  
  14. ...
  15. ...
  16. ...
  17. ?>
  18.  
  19. ------WebKitFormBoundaryRYwV0h3XUa4yf1mo--
  20.  
  21.  
4. Мелкий - 14 Июня, 2013 - 19:27:20 - перейти к сообщению
rame0 пишет:
После сабмита формы, в $_POST имеем следующее:

Вы это смотрите в браузере или сырой ответ сервера?
<??> - с точки зрения браузера полноценный тег и выводу не подлежит. А пользуетесь вы print_r вместо var_dump, так что сразу не видно, есть ли что в элементе массива.
5. rame0 - 14 Июня, 2013 - 19:38:04 - перейти к сообщению
Мелкий пишет:
rame0 пишет:
После сабмита формы, в $_POST имеем следующее:

Вы это смотрите в браузере или сырой ответ сервера?
<??> - с точки зрения браузера полноценный тег и выводу не подлежит. А пользуетесь вы print_r вместо var_dump, так что сразу не видно, есть ли что в элементе массива.


Черт... Походу в отпуск пора Улыбка Я с этим print_r() и сам не увидел, что ошибку устранил... Теперь даже представить не могу как, чтобы на будущее запомнить Недовольство, огорчение

Спасибо.

 

Powered by ExBB FM 1.0 RC1