[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Непонятки при выоде методом POST
Страницы: 1, 2, 3, 4
Владимир55
Пытаюсь создать скрипт для закачки информации из 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 ?
Игорь_Vasinsky
да ты просто гений

Цитата
$file_tmp = $_POST[$filename];


1. не мешало бы проверить - есть ли такой файл // файл ли это
значит нужно знать путь к нему

и считать в $file_tmp с file_get_contents или fgets - построчно - если ожидаемый файл большого размера

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
+ в url - GET, а не POST

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
Файл очень маленький, и находится на компе у бухгалтера. Естественно, что путь к нему неизвестен.
К тому же, при закачке в Битрикс все работает, так что реализация технически возможна без указания пути (только не знаю, как).

Цитата
+ в url - GET, а не POST

Не понял этого. Можете пояснить? В инструкции же четко написано: "посылая содержимое файла или его части в виде POST".
Игорь_Vasinsky
без указания пути - это загрузка файла на сервер в указанное место.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
Цитата (Игорь_Vasinsky @ 9.04.2013 - 11:01)
без указания пути - это загрузка файла на сервер в указанное место.

Как её реализовать?
Игорь_Vasinsky
Цитата
Как её реализовать?


как В.И.Ленин завещал: учиться, учиться и ещё раз по гуглить.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
Цитата (Игорь_Vasinsky @ 9.04.2013 - 11:05)
как В.И.Ленин завещал: учиться, учиться и ещё раз по гуглить.

Признаться, я рассчитвал на более конструктивный совет...
inpost
$_POST[$filename]; ? Обычно файлы через форму заливаются в $_FILES, а это мат.часть.
Если файл уже на сервере, сделай проверку file_exists на существование указанного файла.

_____________
Обучаю веб-программированию качественно и не дорого: http://school-php.com
Фрилансер, принимаю заказы: PHP, JS, AS (видео-чаты). Писать в ЛС (Личные сообщения на phpforum).
Владимир55
Если бы файл был на сервере, то не было бы и предмета для разговора.

Как я уже писал, файл (а точнее, инфа для файла) находится на компьютере. И получить ее, согласно инструкции, следует методом POST.

Я попытался сделать это вот так:
$file_tmp = $_POST[$filename];


Не работает.

Есть ли конкретная идея, как получить инфу методом POST ?

(Замечу - формы ввода как таковой в создаваемом скрипте нет и быть не может).
Игорь_Vasinsky
Цитата
согласно инструкции, следует методом POST.

напишите встречную инструкцию - в которой говориться, что автора предшествующей инструкции надо - головой об стену.

Файл действительно посылают с method = POST, но при этом указывают enctype и файл прилетает в $_FILES

+ это подразумевает трансфер файла.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
То есть, надо так:
$file_tmp = $_FILES[$filename];


Вы это имели в виду?

Однако, результат тот же - файл пустой...
Игорь_Vasinsky
laugh.gif квн

ну как в $_FILES окажется имя искомого файла?

1. $_FILES - это суперглобальный массив
2. Естественное попадание в него данных - это поле с type="file" из формы с enctype=multipart/form-data

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Владимир55
Игорь, Вы можете просто написать эту строчку?

Вот так, по-человечески, просто взять и написать.

Можете это сделать?
OleKh
М.б. открыть 1c_exchange.php и посмотреть код, что там куда запрашивается.

Мне приходилось делать синхронизацию интернет-магазина с Торгсофт. Торгсофт формирует документ и отправляет на сервер в отдельную папку. Далее php-скриптом открывается документ и обрабатывается. Т.е. возможности запросить документ с сервера нет. Был сделан cron который проверял папку на новый файл.

Вопрос, есть ли возможность отправить с сервера запрос на компьютер в 1 С, чтобы из 1С отправить данные на сервер? Я не знаю. Мне кажется это не просто.

Такие задачи на форумах не решаются.

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.