Имя: Пароль:
1C
1С v8
php не может разобрать Соответствие
0 LuitPauld
 
26.12.16
12:02
Здравствуйте!

Наткнулся на проблему распознавания ассоциативных массивов, отправленных из 1С, в php.

Суть: отправляю на скрипт строку, через var_dump выглядит все хорошо, но в echo $_POST['name'] - выводит пустоту.

&НаСервере
Функция ПередачаДанных()

Сервер = "192.168.0.68";
Ресурс = "123.php";
    
http = Новый HTTPСоединение(Сервер);
Данные = Новый Структура;
Данные.Вставить("name", "Ivan");
    
Запись = Новый ЗаписьJSON;
Парамерты = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто,"", Истина);
Запись.УстановитьСтроку(Парамерты);
ЗаписатьJSON(Запись, Данные);
Файл = Запись.Закрыть();
                         
Запрос = Новый HTTPЗапрос(Ресурс);
Запрос.Заголовки.Вставить("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
Запрос.Заголовки.Вставить("cache-control", "max-age=0");
Запрос.Заголовки.Вставить("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
Запрос.Заголовки.Вставить("Accept-Language", "ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4");
Запрос.Заголовки.Вставить("Accept-Encoding", "gzip,deflate,sdch");
Запрос.Заголовки.Вставить("User-Agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36");

Запрос.УстановитьТелоИзСтроки("user="+Файл);    
    
Ответ = ПолучитьИмяВременногоФайла();
http.ОтправитьДляОбработки(Запрос,Ответ);
ФайлОтвета = Новый ТекстовыйДокумент;
ФайлОтвета.Прочитать(Ответ, КодировкаТекста.UTF8);
Строка = ФайлОтвета.ПолучитьТекст();

КонецФункции

Листинг php:

<?php
        
    if(!empty($_POST))
    {
    
        echo $_POST['user'];
        
    }
    else
    {
        echo "empty";
    }
?>


Пробовал через Соответствие - такой же результат, в добавок var_dump выводит пустую строку
1 Юрий Лазаренко
 
26.12.16
12:11
(0) А что в var_dump видно?
2 Garykom
 
гуру
26.12.16
12:19
1. Уверен что json в utf8 записан?
2. "&user="+Файл
3 Юрий Лазаренко
 
26.12.16
13:17
(2) Ну по идее он все равно что-то показать должен, хотя бы кракозябры.
4 Garykom
 
гуру
26.12.16
13:27
(3) там разные глюки есть на разных версиях платформы HTTPЗапрос: выловил баг в "УстановитьТелоИзСтроки" и доказал ..

некоторые кста с BOM глючат в
УстановитьТелоИзСтроки(<ТелоКакСтрока>, <Кодировка>, <ИспользоватьBOM>)
5 Рэйв
 
26.12.16
13:28
>> if(!empty($_POST))
Может это не работает7:-)
6 Fragster
 
гуру
26.12.16
13:34
выкинуть _POST и заюзать php:input
7 Fragster
 
гуру
26.12.16
13:37
как-то так:

ini_set("display_errors", 1);
$input = file_get_contents('php://input');
$obj = json_decode($input);

ну, так проверки на пустоту и прочее.

а в 1с убрать заголовки про мультипарт и сделать Запрос.УстановитьТелоИзСтроки(Файл);
8 Fragster
 
гуру
26.12.16
13:37
да вообще все заголовки убрать
9 Рэйв
 
26.12.16
13:45
invoke  GetWindowDC,[hWnd]
        mov     [windowDC],eax

        invoke  CreateCompatibleDC,[windowDC]
        mov     [newDC],eax

        ; Создать пустой битмап для скриншота
        invoke  CreateCompatibleBitmap,[windowDC],[window_width],[window_height]
        mov     [hBitmap],eax

        invoke  SelectObject,[newDC],[hBitmap]

        ; Флаг для захвата полупрозрачных окон
        CAPTUREBLT = 0x40000000
        invoke  BitBlt,[newDC],0,0,[window_width],[window_height],[windowDC],\
                0,0,SRCCOPY+CAPTUREBLT

..Как то так:-))
10 Юрий Лазаренко
 
26.12.16
13:49
(4) Ну разве что BOM, а так при кривой кодировке обычно глюки бывают, если и параметр, и его значение неправильно закодированы. А у ТС параметр "user=" в коде задан, не в файле.
11 Fragster
 
гуру
26.12.16
13:53
(10) у автора не BOM, а всякие экранирования служебных символов при POST ("'?& и т.п.) и переносы строк всё портят.
Чтобы не забивать этим себе голову, убрать _POST, как указано в (7)