Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Непонятки при получении информации POST
 
 автор: Владимир55   (09.04.2013 в 17:03)   письмо автору
 
 

Пытаюсь создать скрипт для закачки информации на сайт из 1С на компьютере. В протоколе, регламентирующем обмен, есть такой пункт:
1С запросами вида:
http://<сайт>/bitrix/admin/1c_exchange.php?type=catalog&mode=file&filename=<имя файла>
загружает на сервер файлы обмена в формате CommerceML 2, посылая содержимое файла или его части в виде POST.


Этот шаг обмена я реализовал вот таким образом:
if($_GET['type']=='catalog'&&$_GET['mode']=='file')    
{        
$filename = $_GET['filename'];        
$file_tmp = $_POST[$filename];        
file_put_contents($filename, $file_tmp);        
echo "success\n";    
}


В результате я получаю два файла, которые и ожидались - import.xml и offers.hml. Но, к сожалению, оба они пусты! Хотя товары в 1С имеются и при выгрузке в стандартную ЦМС все нормально.

Может быть, здесь что-то неверно с использованием метода POST ?

  Ответить  
 
 автор: confirm   (09.04.2013 в 17:33)   письмо автору
 
   для: Владимир55   (09.04.2013 в 17:03)
 

А почему вы пишите, файл 1c_exchange.php, это что пустая болванка, в которую вы должны поместить свой код?

type=catalog - это что означает, путь к каталогу?
mode=file - это не о прикрепленном файле речь идет? Если так, то это массив не $_POST, а $_FILES

  Ответить  
 
 автор: Владимир55   (09.04.2013 в 17:41)   письмо автору
 
   для: confirm   (09.04.2013 в 17:33)
 

"А почему вы пишите, файл 1c_exchange.php, это что пустая болванка, в которую вы должны поместить свой код?"

Да, скрипт создается с нуля на пустом файле с именем 1c_exchange.php.

"type=catalog - это что означает, путь к каталогу?"
Это означает, что на данном шаге производится заполнение каталога. С путем связи нет.

"это массив не $_POST, а $_FILES"
У меня тоже есть такие смутные догадки, но как это реализовать - не знаю.

Можете предложить вариант?

  Ответить  
 
 автор: confirm   (09.04.2013 в 17:45)   письмо автору
 
   для: Владимир55   (09.04.2013 в 17:41)
 

Как именно реализовать я не знаю, так как это мои предположения только, но их можно проверить, если после этого запроса клиента вывести на экран массив $_FILES, если он не пуст, значит так оно и есть.
Можно текстовый файл и в textarea поместить и передать так, тогда это из $_POST надо получать.
Как передает клиент я не в курсе, так что проверьте массивы, будет ясно.

  Ответить  
 
 автор: Владимир55   (09.04.2013 в 17:52)   письмо автору
 
   для: confirm   (09.04.2013 в 17:45)
 

По существу, массив $_POST уже проверен в имеющемся изначально коде:
$file_tmp = $_POST[$filename];         
file_put_contents($filename, $file_tmp); 


И получается, что этот массив пуст, поскольку файлы пустые.

Вы предлагаете проверить массив $_FILES так ?
$file_tmp = $_FILES[$filename];         
file_put_contents($filename, $file_tmp); 


Он тоже пуст.

  Ответить  
 
 автор: confirm   (09.04.2013 в 17:59)   письмо автору
 
   для: Владимир55   (09.04.2013 в 17:52)
 

Нет так можно записать только одномерный массив, $_FILES таковым не является, поэтому нужно его предварительно сериализовать или перевести в JSON формат.

  Ответить  
 
 автор: Владимир55   (09.04.2013 в 18:07)   письмо автору
 
   для: confirm   (09.04.2013 в 17:59)
 

Вот так годится?

$file_tmp = serialize ($_FILES[$filename]);
file_put_contents("3h_" . $filename, $file_tmp);


В сохраненном файле прописано
N;

  Ответить  
 
 автор: confirm   (09.04.2013 в 18:11)   письмо автору
 
   для: Владимир55   (09.04.2013 в 18:07)
 

Пойдет, ясно, что так не передается, ибо были бы ключи и значения массива FILES.
Запишите таким же образом весь массив POST, что получите?

  Ответить  
 
 автор: Владимир55   (09.04.2013 в 18:21)   письмо автору
 
   для: confirm   (09.04.2013 в 18:11)
 

Тоже самое.

  Ответить  
 
 автор: confirm   (09.04.2013 в 18:23)   письмо автору
 
   для: Владимир55   (09.04.2013 в 18:21)
 

Тогда либо клиент ничего не передает, или передает, возможно, методом PUT, но вроде бы о массиве POST речь идет.

  Ответить  
 
 автор: Владимир55   (10.04.2013 в 19:06)   письмо автору
 
   для: confirm   (09.04.2013 в 18:23)
 

Проблема разрешилась использованием
$file_tmp = $GLOBALS['HTTP_RAW_POST_DATA'];

  Ответить  
 
 автор: confirm   (10.04.2013 в 20:11)   письмо автору
 
   для: Владимир55   (10.04.2013 в 19:06)
 

Ясно, необработанные POST данные.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования