|
|
|
| Пытаюсь создать скрипт для закачки информации на сайт из 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 ? | |
|
|
|
|
|
|
|
для: Владимир55
(09.04.2013 в 17:03)
| | А почему вы пишите, файл 1c_exchange.php, это что пустая болванка, в которую вы должны поместить свой код?
type=catalog - это что означает, путь к каталогу?
mode=file - это не о прикрепленном файле речь идет? Если так, то это массив не $_POST, а $_FILES | |
|
|
|
|
|
|
|
для: confirm
(09.04.2013 в 17:33)
| | "А почему вы пишите, файл 1c_exchange.php, это что пустая болванка, в которую вы должны поместить свой код?"
Да, скрипт создается с нуля на пустом файле с именем 1c_exchange.php.
"type=catalog - это что означает, путь к каталогу?"
Это означает, что на данном шаге производится заполнение каталога. С путем связи нет.
"это массив не $_POST, а $_FILES"
У меня тоже есть такие смутные догадки, но как это реализовать - не знаю.
Можете предложить вариант? | |
|
|
|
|
|
|
|
для: Владимир55
(09.04.2013 в 17:41)
| | Как именно реализовать я не знаю, так как это мои предположения только, но их можно проверить, если после этого запроса клиента вывести на экран массив $_FILES, если он не пуст, значит так оно и есть.
Можно текстовый файл и в textarea поместить и передать так, тогда это из $_POST надо получать.
Как передает клиент я не в курсе, так что проверьте массивы, будет ясно. | |
|
|
|
|
|
|
|
для: 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);
|
Он тоже пуст. | |
|
|
|
|
|
|
|
для: Владимир55
(09.04.2013 в 17:52)
| | Нет так можно записать только одномерный массив, $_FILES таковым не является, поэтому нужно его предварительно сериализовать или перевести в JSON формат. | |
|
|
|
|
|
|
|
для: confirm
(09.04.2013 в 17:59)
| | Вот так годится?
$file_tmp = serialize ($_FILES[$filename]);
file_put_contents("3h_" . $filename, $file_tmp);
|
В сохраненном файле прописано | |
|
|
|
|
|
|
|
для: Владимир55
(09.04.2013 в 18:07)
| | Пойдет, ясно, что так не передается, ибо были бы ключи и значения массива FILES.
Запишите таким же образом весь массив POST, что получите? | |
|
|
|
|
|
|
|
для: confirm
(09.04.2013 в 18:11)
| | Тоже самое. | |
|
|
|
|
|
|
|
для: Владимир55
(09.04.2013 в 18:21)
| | Тогда либо клиент ничего не передает, или передает, возможно, методом PUT, но вроде бы о массиве POST речь идет. | |
|
|
|
|
|
|
|
для: confirm
(09.04.2013 в 18:23)
| | Проблема разрешилась использованием
$file_tmp = $GLOBALS['HTTP_RAW_POST_DATA'];
|
| |
|
|
|
|
|
|
|
для: Владимир55
(10.04.2013 в 19:06)
| | Ясно, необработанные POST данные. | |
|
|
|