• 1С: Можно ли обновить базу на другом компьютере?

    @GSV4 Автор вопроса
    Всем спасибо!
    Установил на другом сервере 64-разрядную "1С". Если ее не "вылечить", через несколько минут она "вылетает" с сообщением "Обнаружено нарушение целостности системы".
    Пробовать обновлять буду позже.
    Ответ написан
    Комментировать
  • PHP: Как вывести русский текст в консоли Windows 7?

    @GSV4 Автор вопроса
    Ура! Таки получилось!

    exec('chcp 1251');
    
    $s = file_get_contents('01 ANSI.txt');
    $s = iconv('cp1251', 'cp866', $s);
    echo $s;
    
    $s = file_get_contents('02 OEM.txt');
    echo $s;
    
    $s = file_get_contents('03 UTF-8.txt');
    $s = iconv('utf-8', 'cp866', $s);
    echo $s;


    И на экране выходит:

    6357fd23b6a2e660025762.jpeg

    Т.е. консоль должна быть в кодировке 1251, а выводимый текст - в кодировке 866. Всё логично! ))
    Ответ написан
  • Почему stream_context_create возвращает null?

    @GSV4 Автор вопроса
    Наконец-то я понял, в чём было дело!

    1. Функция var_export, если ей передать параметр-ресурс, всегда возвращает NULL, т.к. не может представить содержимое ресурса на PHP-языке. А вот функция print_r в этом случае возвращает строку "Resource id #N", где N - некоторый номер.

    2. Мой 1-й скрипт получал NULL из-за несоответствия данных: 2-й скрипт отправлял ему данные в формате "application/x-www-form-urlencoded", а он обрабатывал их как json-данные.

    Так что вот правильный вариант.
    1-й скрипт:
    <?php
    /*
      01.php
    */
    
    require_once 'GSDebug2.php';
    
    $sF_Script = basename(__FILE__);
    $oShowVars = new CShowVars($sF_Script);
    
    echo "Скрипт \"$sF_Script\": Начало работы.<br>";
    $sInput = file_get_contents('php://input');
    
    $oShowVars->Do(
      '$sInput', $sInput
    );
    
    echo "Скрипт \"$sF_Script\": Конец работы.<br>";
    exit;
    ?>


    2-й скрипт:
    <?php
    /*
      02.php
    */
    
    require_once 'GSDebug2.php';
    
    $oShowVars = new CShowVars(basename(__FILE__));
    
    echo '<pre>';
    echo 'Отправка запроса на сервер...<br>';
    
    $rContext = stream_context_create(
      [
        'http' => [
          'method'  => 'POST',
          'header'  => 'content-type: application/json',
          'content' => json_encode(
            [
              'type'     => 'confirmation',
              'group_id' => 1
            ]
          )
        ]
      ]
    );
    
    $sResult = file_get_contents('http://.../01.php', false, $rContext);
    echo 'Ответ сервера:<br>', $sResult, '<br>';
    
    $oShowVars->Do(
      '$rContext', $rContext
    );
    
    echo '</pre>';
    exit;
    ?>


    И вспомогательный скрипт для отладки:
    <?php
    /*
      GSDebug2.php
    */
    
    // Класс CShowVars
    // ====================================================================================================
    
    class CShowVars
    /*
      Выводит значения переменных (выражений) в окно браузера.
    */
    {
      public string $sTitle;
      private $asLine = [];
    
      public function __construct(string $_sTitle = '')
      /*
        ПАРАМЕТРЫ
          $_sTitle
            Заголовок блока, выводимого в браузере.
            Заголовок не является обязательным. Наличие заголовка позволяет понять, из какого скрипта осуществляется вывод.
      */
      {
        if ($_sTitle) $_sTitle = ' ' . $_sTitle . ' ';
        $this->sTitle = $_sTitle;
      }
    
      public function Do()
      /*
        Выводит имена и значения указанных переменных и/или выражений в окно браузера.
    
        ПАРАМЕТРЫ
          Функция рассчитана на чётное количество параметров.
          Каждый нечётный параметр должен представлять собой имя переменной (выражения),
          каждый чётный - значение этой переменной (выражения).
          Если имя переменной будет пустой строкой, функция выведет в окно пустую строку как разделитель.
    
        ПРИМЕР
          $oShowVars->Do(
            '$_sMailsTo', $_sMailsTo,
            '$_sHiddenMailsTo', $_sHiddenMailsTo
          );
    
          В окне браузера будет выведено:
    
          ///////////////////////////////////////////////////////////////////////////////////////////////////////
          || $_sMailsTo = 'gsv4@inbox.ru'
          || $_sHiddenMailsTo = 'admin@cc-s.ru'
          \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
      */
      {
        $iSepLen = 100;
        $iSepPadLen = $iSepLen - mb_strlen($this->sTitle);
        $iSepPadLenL = $iSepPadLen >> 1;
        $iSepPadLenR = $iSepPadLen - $iSepPadLenL;
    
        $sSepA = str_repeat('/', $iSepPadLenL) . $this->sTitle . str_repeat('/', $iSepPadLenR);
        $sPrefix = '|| ';
        $sSepB = str_repeat('\\', $iSepLen);
    
        $iTotalParams = func_num_args();
    
        if ($iTotalParams < 2 || $iTotalParams & 1)
          throw new Exception('CShowVars::Do: Функция рассчитана на чётное количество параметров!');
    
        $asLine = $this->asLine;
        $asLine = [$sSepA];
        $i = 0;
    
        foreach (func_get_args() as $xArg) {
          if (++$i & 1)
            $sVarName = $xArg;
          else if ($sVarName === '')
            $asLine[] = $sPrefix;
          else {
            $sVarType = gettype($xArg);
    
            switch ($sVarType) {
              case 'integer':
                $asLine[] = $sPrefix . $sVarName . ' = [' . $sVarType . '] ' . number_format($xArg, 0, ',', ' ');
                break;
    
              case 'array':
              case 'object':
                $asVarValue = explode("\n", var_export($xArg, true));
                $asLine[] = $sPrefix . $sVarName . ' = ' . array_shift($asVarValue);
                foreach ($asVarValue as $sVarValue) $asLine[] = $sPrefix . $sVarValue;
                break;
    
              case 'resource':
              case 'resource (closed)':
                $asLine[] = $sPrefix . $sVarName . ' = [' . $sVarType . '] ' . print_r($xArg, true);
                break;
    
              default:
                $asLine[] = $sPrefix . $sVarName . ' = [' . $sVarType . '] ' . var_export($xArg, true);
            }
          }
        }
    
        $asLine[] = $sSepB;
        echo implode(PHP_EOL, $asLine), PHP_EOL;
        $asLine = [];
        return true;
      } // function Do()
    } // class CShowVars
    ?>


    Результат работы 2-го скрипта:
    Отправка запроса на сервер...
    Ответ сервера:
    Скрипт "01.php": Начало работы.
    ////////////////////////////////////////////// 01.php //////////////////////////////////////////////
    || $sInput = [string] '{"type":"confirmation","group_id":1}'
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Скрипт "01.php": Конец работы.
    
    ////////////////////////////////////////////// 02.php //////////////////////////////////////////////
    || $rContext = [resource] Resource id #3
    \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    Ответ написан
    Комментировать
  • Почему отправленное письмо с помощью php скрипта попадает в спам?

    Нужно на своем почтовом сервере прописать:
    - SPF-запись;
    - DKIM-запись;
    - DMARC-запись (не обязательно, но желательно).
    Подробнее см. здесь:
    https://help.mail.ru/postmaster/technical-settings...
    (Настройка SPF, DKIM, DMARC)
    или здесь:
    https://sendpulse.com/ru/knowledge-base/email-serv...
    (Как настроить аутентификацию email сообщений)
    Ответ написан
    Комментировать
  • Почему не формируется отчет по звонкам?

    @GSV4 Автор вопроса
    Проблема решилась. Знающий человек подключился удаленно к серверу и что-то там сделал.
    Ответ написан
    Комментировать