• Как настроить API к закрытой системе?

    vekov
    @vekov Автор вопроса
    Дмитрий Беляев, не совсем так. Смотрите, на [site-2.ru] работает пользователь, там есть информация о списке товаров, но нет актуальных статусов по ним (продан/доступен/забронирован). Пользователь на [site-2.ru] нажимает кнопку и ему прилетает статус от [crm.ru]. Так как напрямую от [site-2.ru] к [crm.ru] доступа нет, то я предположил, что можно сделать какой-то файл на сайте, к которому мы имеем полный доступ [site-1.ru], который будет слушать [crm.ru]. И получается [site-2.ru] делает запрос к [site-1.ru], [crm.ru] следит за каким-нибудь файлом/сокетом/портом на [site-1.ru] и считывает запрос, который был отправлен между сайтам, обрабатывает его, и отправляет результат на [site-1.ru], который в свою очередь отвечает клиенту, который сидит все это время на [site-2.ru] и нажал проверку доступности товара.
  • Как настроить API к закрытой системе?

    vekov
    @vekov Автор вопроса
    Например надо будет проверить, есть ли товар в продаже, или забронировать его. Товаров тысяч 5. Статусы меняются в среднем раз в час.
  • Как настроить API к закрытой системе?

    vekov
    @vekov Автор вопроса
    Условно-неизменяемый у нас только [site-2.ru]. На [site-1.ru] мы можем делать что хотим. А [crm] в свою очередь может слушать/менять [site-1.ru], а [site-2.ru] может делать запросы к [site-1.ru].
  • Как настроить API к закрытой системе?

    vekov
    @vekov Автор вопроса
    вот потому мне и показалось, что, раз есть хоть какое-то решение, приходящее в голову сходу. Значит должно быть и какое-то адекватное решение:)
    Соедиение с БД через unix-сокет работает по сути похожим образом, слышал о веб-сокетах, предположил что вероятно они могли бы решить мою проблему.
  • Как настроить API к закрытой системе?

    vekov
    @vekov Автор вопроса
    история в том, данные должны приходить по запросу с [site-2.ru], данные лежат на [crm.ru]. Ваш метод, как я понимаю, подразумевают, что инициатор - [crm.ru].
  • Как настроить API к закрытой системе?

    vekov
    @vekov Автор вопроса
    Ну никак - тут быть не может, так как я знаю совсем велосипедный вариант решения:
    Например сделать так, чтобы по крону каждую секунду [crm.ru] и [site-2.ru] делали запрос чтения файла на [site.ru] допустим через ftp. И если в этом файле например появляется запись вида
    "1587400804_[site-2.ru] : getCrmProperty('count')"
    То [crm.ru] забирает ее себе и запускает соответствующую функцию, результат возвращая в тот же файл по ftp с тем же id (1587400804):
    "1587400804_[crm.ru] : 10"
    Так как у нас [site-2.ru] тоже каждую секунду проверяет изменения в файле на [site.ru], он забирает нужную строку из файла и возвращает ее пользователю.

    Ну только это какой-то дико пугающий вариант, однако проблем в реализации (кроме неадекватной растраты ресурсов и использования кустарных методов) - я не вижу.
  • Почему не отвечает сервер на порту, указанном в docker-compose?

    vekov
    @vekov Автор вопроса
    name - имеете ввиду container_name?

    Я переписал всё, сейчас выглядит так:

    docker-compose.yml
    Gate-nginx:
        container_name: Gate-nginx
        image: nginx:latest
        ports:
            - "8000:80"
        volumes:
            - ./Gate/public:/var/www
            - ./Gate/configs/nginx/default.conf:/etc/nginx/sites-enabled/default
            - ./Gate/configs/nginx/default.conf:/etc/nginx/sites-available/default
        links:
            - Gate-php
    Gate-php:
        container_name: Gate-php
        image: php:7-fpm
        volumes:
            - ./Gate/public:/var/www


    /etc/hosts
    127.0.0.1 localhost
    194.67.112.8 xn----7sbhdycib3bahm3ad4m.xn--p1ai
    ::1 localhost ip6-localhost ip6-loopback
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters


    Gate/configs/nginx/default.conf
    server {
        index index.php index.html;
        server_name Gate-nginx;
        error_log  /var/log/nginx/error.log;
        access_log /var/log/nginx/access.log;
        root /var/www;
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass Gate-php:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    }


    В общем сейчас работает только приветствие nginx, но файлы, которые в volume, не находятся, выдает 404.
  • Почему не отвечает сервер на порту, указанном в docker-compose?

    vekov
    @vekov Автор вопроса
    Евгений, у меня есть домен, правда он кириллический (конвертировал его в punnycode) - xn----7sbhdycib3bahm3ad4m.xn--p1ai

    Прописал на VPS etc/hosts:
    194.67.112.8 xn----7sbhdycib3bahm3ad4m.xn--p1ai

    Не сработало, сделал пока что у себя на компе в hosts аналогичную запись, теперь по домену открывает приветствие nginx. Может быть я вообще что-то глобально не так делаю?

    Перенёс конфиги, которые идут в вольюм:
    Gate-nginx:
        image: nginx:latest
        ports:
            - "8000:80"
        volumes:
            - ./Gate/public:/var/www
            - ./Gate/configs/nginx/default.conf:/etc/nginx/sites-enabled/default
            - ./Gate/configs/nginx/default.conf:/etc/nginx/sites-available/default
        links:
            - Gate-php
    Gate-php:
        image: php:7-fpm
        volumes:
            - ./Gate/public:/var/www


    default.conf:
    server {
        index index.php index.html;
        server_name Gate-nginx;
        error_log  /var/log/nginx/error.log;
        access_log /var/log/nginx/access.log;
        root /var/www;
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass Gate-php:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    }


    Захожу через:
    xn----7sbhdycib3bahm3ad4m.xn--p1ai:8000
    Открывает приветствие nginx, файлов которые в volume - не видно.

    Пробовал менять
    server_name Gate-nginx;
    на:
    server_name xn----7sbhdycib3bahm3ad4m.xn--p1ai;
    Ничего не меняется.
  • Почему не отвечает сервер на порту, указанном в docker-compose?

    vekov
    @vekov Автор вопроса
    Спасибо, поправил конфиг, nginx стал запускаться.
    Но файлы не видит, я так понял проблема в рут директории, но не понял как это работает:

    server {
        index index.php index.html;
        server_name mysite.local;
        error_log  /var/log/nginx/error.log;
        access_log /var/log/nginx/access.log;
        root /var/www;
    
        location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass Gate-php:9000;
            fastcgi_index index.php;
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_path_info;
        }
    }


    Постоянно выводит только приветственную страницу nginx. Добавил в подкаталог Gate/test, где разместил index.html и index.php - возвращает всегда 404:
    194.67.112.8:8000/test/index.php
  • Что может быть не так с SOAP, если по cURL доступ есть?

    vekov
    @vekov Автор вопроса
    Я пока что просто пытаюсь запустить SOAP клиент, но как только я создаю экземпляр класса, получаю ошибку. Так что код который я привел - это в общем то весь код)

    Адрес открывается в браузере.
  • Почему со страниц ЧПУ каталога редиректит на /bitrix/urlrewrite?

    vekov
    @vekov Автор вопроса
    Модулей нет, других редиректов тоже нет.
    /urlrewrite.php создавался автоматом, я его не трогал.
    Выглядит он вот так:
    spoiler
    <?php
    $arUrlRewrite=array (
      0 => 
      array (
        'CONDITION' => '#^\\/uslugi-i-tseny\\/([^\\/?]+)\\/*\\?*([^\\/?]*)$#',
        'RULE' => 'CODE=$1&$2',
        'ID' => '',
        'PATH' => '/uslugi-i-tseny/index.php',
        'SORT' => 100,
      ),
      1 => 
      array (
        'CONDITION' => '#^/online/([\\.\\-0-9a-zA-Z]+)(/?)([^/]*)#',
        'RULE' => 'alias=$1',
        'ID' => '',
        'PATH' => '/desktop_app/router.php',
        'SORT' => 100,
      ),
      2 => 
      array (
        'CONDITION' => '#^/otzyvy-o-deteyling-tsentrah/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/otzyvy-o-deteyling-tsentrah/index.php',
        'SORT' => 100,
      ),
      3 => 
      array (
        'CONDITION' => '#^/otzyvy-o-deteyling-marketah/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/otzyvy-o-deteyling-marketah/index.php',
        'SORT' => 100,
      ),
      4 => 
      array (
        'CONDITION' => '#^/bitrix/services/ymarket/#',
        'RULE' => '',
        'ID' => '',
        'PATH' => '/bitrix/services/ymarket/index.php',
        'SORT' => 100,
      ),
      5 => 
      array (
        'CONDITION' => '#^/online/(/?)([^/]*)#',
        'RULE' => '',
        'ID' => '',
        'PATH' => '/desktop_app/router.php',
        'SORT' => 100,
      ),
      6 => 
      array (
        'CONDITION' => '#^/deteyling-tsentry/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/deteyling-tsentry/index.php',
        'SORT' => 100,
      ),
      7 => 
      array (
        'CONDITION' => '#^/stssync/calendar/#',
        'RULE' => '',
        'ID' => 'bitrix:stssync.server',
        'PATH' => '/bitrix/services/stssync/calendar/index.php',
        'SORT' => 100,
      ),
      8 => 
      array (
        'CONDITION' => '#^/personal/lists/#',
        'RULE' => '',
        'ID' => 'bitrix:lists',
        'PATH' => '/personal/lists/index.php',
        'SORT' => 100,
      ),
      9 => 
      array (
        'CONDITION' => '#^/deteyling-shop/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/deteyling-shop/index.php',
        'SORT' => 100,
      ),
      10 => 
      array (
        'CONDITION' => '#^/content/faq/#',
        'RULE' => '',
        'ID' => 'bitrix:support.faq',
        'PATH' => '/content/faq/index.php',
        'SORT' => 100,
      ),
      11 => 
      array (
        'CONDITION' => '#^/produktsiya/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/produktsiya/index.php',
        'SORT' => 100,
      ),
      12 => 
      array (
        'CONDITION' => '#^/portfolio/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/portfolio/index.php',
        'SORT' => 100,
      ),
      13 => 
      array (
        'CONDITION' => '#^/aktsii/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/aktsii/index.php',
        'SORT' => 100,
      ),
      14 => 
      array (
        'CONDITION' => '#^/blog/#',
        'RULE' => '',
        'ID' => 'bitrix:catalog',
        'PATH' => '/blog/index.php',
        'SORT' => 100,
      ),
      15 => 
      array (
        'CONDITION' => '#^/club/#',
        'RULE' => '',
        'ID' => 'bitrix:socialnetwork',
        'PATH' => '/club/index.php',
        'SORT' => 100,
      ),
    );


    Неправильно редиректит на другой домен с каталога:
    /deteyling-tsentry/
  • Почему со страниц ЧПУ каталога редиректит на /bitrix/urlrewrite?

    vekov
    @vekov Автор вопроса
    Не помогло, все так же выдает urlrewrite.php. Вот полный файл:

    <IfModule mod_rewrite.c>
      Options +FollowSymLinks
      RewriteEngine On
      RewriteCond %{HTTP_HOST} !^pd\.info$ [NC]
      RewriteRule ^(.*)$ https://pd.info/$1 [R=301,L]
    
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-l
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$
      RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L]
      RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
    </IfModule>
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    Lander, да, я в начале ставлю
    whoami && ...
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    Lander, да, обычно в консоли работаю под рутом, а скрипты запускаются под user1. Но вот попробовал такую штуку - в консоли перезашел под user1:
    su user1
    Затем сделал коммит. Там все сработало, после указания емейла и имени. Попробовал после этого через скрипт - не работает. Пишет всю ту же ошибку.

    Зато если добавить через && конфиги, типа:
    $git_branches = exec("cd ".$_SERVER["DOCUMENT_ROOT"]." && git config --global user.name 'vekovis' && git commit -m 'test'", $stdin, $stderr);


    То выдает вообще иную историю. Сейчас не вижу этой ошибки, но по памяти:
    fatal: $HOME is not defined


    С этой ошибкой я потратил еще часа полтора времени, не смог ни к чему придти, и отправился с работы домой. Вот единственное я подумал, что если авторизовать скрипт через рут, может что выйдет таки? Только я не знаю как авторизоваться под рутом в одну строку su просит пароль отдельным инпутом, а login вообще довольно странно работает.
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    Lander, В общем нашел гениальную вещь, совет в конец команды добавить " 2>&1", тогда будет видно аутпут.

    Получил я значит такую вот вещь:
    128
    Array
    (
    [0] =>
    [1] => *** Please tell me who you are.
    [2] =>
    [3] => Run
    [4] =>
    [5] => git config --global user.email "you@example.com"
    [6] => git config --global user.name "Your Name"
    [7] =>
    [8] => to set your account's default identity.
    [9] => Omit --global to set the identity only in this repository.
    [10] =>
    [11] => fatal: empty ident name (for ) not allowed
    )
    fatal: empty ident name (for ) not allowed


    Вообще не очень понимаю почему запрашивает юзера, я думал юзер привязан к самому репозиторию в данном случае в глобальных настройках. Ведь когда я через консоль захожу ничего указывать каждый раз не просит. А ведь была одна из моих первых догадок... после кавычек)
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    Lander, кстати с кавычек я начинал, не помогло)

    Попробовал с exec():
    $git_branches = exec("cd ".$_SERVER["DOCUMENT_ROOT"]." && git commit -m 'test'", $stdin, $stderr);
    pre($stderr);
    pre($stdin);

    128 ошибка...

    Интернет выдал такую инфу:
    128 - Invalid argument to exit. Exit takes only integer range 0 – 255.

    Что в общем то не очень объяснило ситуацию.
  • Почему не срабатывает git commit в shell_exec()?

    vekov
    @vekov Автор вопроса
    oxidmod, Ну по пунктам:
    1) Делаю # git status. Пусто.
    2) Делаю изменения в файле. В #git status появляются изменения.
    3) Запускаю скрипт пхп на добавление. $git_branches = shell_exec('git add ../'.$_GET["FILE"]);
    4) В #git status файл перемещается в раздел Changes to be commited.
    5) Запускаю второй скрипт, который должен сделать коммит. #git status не меняется. Остается в разделе Changes to be commited.
    6) Делаю точно такую же команду через консоль, коммит срабатывает, изменения из статуса уходят.
  • Как получить ответ через SOAP запрос?

    вы точно правильно пишете 'Russian'? Может надо 'Russia'? А то как то не логично выглядит
  • Mssql_connect / PDO('sqlsrv'). Как сделать команду на UPDATE?

    vekov
    @vekov Автор вопроса
    Лентюй, текст запрос?

    Я вызываю функцию:
    ExtrasFunction::set_finish_date('366', '2014-02-28 00:00:00.000') // В таком виде получаются данные после чтения из mssql, так что такую строку и передаю. Пробовал и без ".000"


    То есть в prepare приходить должно:
    prepare('UPDATE Pmark SET Finish=2014-02-28 00:00:00.000 WHERE ID=366');
    ....

    Ну да, чет беда. Туда нужны кавычки? Я попробовал поставить двойные:
    $stmt = $db->prepare("UPDATE Pmark SET Finish='".$date."' WHERE ID='".$ID."'");

    Выдало:
    SQLSTATE[22007]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Преобразование типа данных varchar в тип данных datetime привело к выходу значения за пределы диапазона.