8.х ОБМЕН Ошибка при передаче информации на сайт из 1С

Тема в разделе "Обмен данными в "1С:Предприятие 8"", создана пользователем seregarem, 1 дек 2011.

  1. TopicStarter Overlay
    seregarem
    Offline

    seregarem

    Регистрация:
    30 ноя 2011
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    При выполнении обмена данными выполняется скрипт (код выборочно взят из Битрикса):
    Код:
    $type=$_GET[type];
    $mode=$_GET[mode];
    $file=$_GET[filename];
    $fp = fopen('data.txt', 'a');
    fwrite($fp, "Type: ".$type."\n");
    fwrite($fp, "Mode: ".$mode."\n");
    fwrite($fp, "File: ".$file."\n");
    fwrite($fp, "\n");
    
    ob_start();
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">if($_GET["mode"] == "checkauth"){</span>
    echo "success\n";
    echo session_name()."\n";
    echo session_id() ."\n";
    }
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">if($_GET["mode"] == "init"){</span>
    echo "zip=yes"."\n";
    echo "file_limit=0\n";
    }
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">if($_GET["mode"] == "file"){</span>
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">	if(isset($_GET["filename"]) && (strlen($_GET["filename"])>0)){</span>
    $filename = trim(str_replace("\\", "/", trim($_GET["filename"])), "/");
    $FILE_NAME = $filename;
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">		if((strlen($FILE_NAME) > 1)){</span>
    $ABS_FILE_NAME = $FILE_NAME;
    $WORK_DIR_NAME = substr($ABS_FILE_NAME, 0, strrpos($ABS_FILE_NAME, "/")+1);
    }
    }
    
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">	if($ABS_FILE_NAME){</span>
    if(function_exists("file_get_contents")){
    $DATA = file_get_contents("php://input");
    file_put_contents($ABS_FILE_NAME,$DATA);
    }
    $file_name=$FILE_NAME;
    if(function_exists("zip_open")){
    $hZip = zip_open($file_name);
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">					if($hZip){	</span>
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/while')">						while($entry = zip_read($hZip)){</span>
    $entry_name = zip_entry_name($entry);
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">							if(zip_entry_filesize($entry) && strpos($entry_name,".xml") !== false){</span>
    $ABS_FILE_NAME = $dir_name.$entry_name;
    $file_name = $dir_name.$entry_name;
    $fout = fopen($file_name, "wb");
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">								if($fout){</span>
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/while')">									while($data = zip_entry_read($entry, 102400)){</span>
    $result = fwrite($fout, $data);
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">										if($result !== (function_exists("mb_strlen")? mb_strlen($data, 'latin1'): strlen($data)))</span>
    return false;
    }
    }
    }
    zip_entry_close($entry);
    }
    zip_close($hZip);
    }
    }
    else echo "error\n";
    }
    }
    fclose($fp);
    $contents = ob_get_contents();
    ob_end_clean();
    
    $str = (function_exists("mb_strlen")? mb_strlen($contents, 'latin1'): strlen($contents));
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/if')">if($_GET["mode"] == "query"){</span>
    header("Content-Type: application/xml; charset=windows-1251");
    header("Content-Length: ".$str);
    }
    else{
    header("Content-Type: text/html; charset=windows-1251");
    }
    echo $contents;
    die();
    
    Для теста в файл сохраняются запросы от 1С. Вот, что выдает 1С:
    Type: catalog
    Mode: checkauth
    File:

    Type: catalog
    Mode: init
    File:

    Type: catalog
    Mode: file
    File: v8_2D93_6b.zip

    Type: catalog
    Mode: import
    File: import.xml

    В журнале в 1С пишет:
    Интерактивный обмен
    01.12.2011 20:50:05 Запуск выгрузки товаров
    01.12.2011 20:50:05 Завершено формирование файлов выгрузки товаров
    Выгружено товаров: 1
    предложений: 0
    картинок: 0
    файлов: 0

    В том числе для каталога Основной каталог товаров:
    товаров: 1
    предложений: 0
    картинок: 0
    файлов: 0

    01.12.2011 20:50:05 Выгрузка на сайт завершилась с ошибками.
    Получение данных с сервера: Получен пустой ответ сервера.
    import.xml: Не удалось получить текущее состояние процесса обмена. Данные обмена отправлены, но не загружены.
    01.12.2011 20:50:05 Завершена выгрузка товаров

    Сам архив и xml-файл нормально сохраняется на сайте, дальнейшая его обработка, в принципе, понятна. Но почему выдается ошибка в журнале? Не совсем понятно как отсылать данные в 1С - подскажите, пожалуйста. Посмотрите корректность кода.
  2. kavak
    Offline

    kavak Опытный в 1С

    Регистрация:
    13 май 2010
    Сообщения:
    703
    Симпатии:
    0
    Баллы:
    26
    php шников тут почти нет=)
    А так могу сказать что выборочно выдерать коды это плохо,вы пропустили именно индикацию процесса обмена!

Поделиться этой страницей