← Назад к заметкам

Заметки

Как диагностировать fsockopen в коробке

Как диагностировать fsockopen в коробке: Сеть, SSL, proxy, права, php.ini.

Как диагностировать fsockopen в коробке. Основной фокус: Сеть, SSL, proxy, права, php.ini.

Задача

Разобрать коробочную диагностику: обновление, 500, cron, доступ, сеть или восстановление.

Задача — как диагностировать fsockopen в коробке. Сеть, SSL, proxy, права, php.ini.

Главное — не искать один универсальный метод, а сначала определить сущность, права и слой API, через который выполняется действие.

Как это устроено

В коробке результат зависит не только от кода Битрикса, но и от окружения: PHP, права файлов, nginx/apache, php-fpm, cron, база, сеть и локальные доработки.

В Bitrix24 права почти всегда считаются не одной настройкой, а комбинацией роли, группы, структуры, владельца, привязки к сущности и контекста текущего пользователя.

Если сценарий проверяется под администратором, отдельно повторите его под обычным пользователем. Для прав, CRM, задач, Диска и приложений это часто даёт другой результат.

Рабочий подход

Собирайте диагностику слоями: логи PHP и веб-сервера, консоль браузера, агенты, права файлов, состояние модулей, кеш и последние изменения. На бою сначала фиксируйте текущее состояние, потом меняйте.

Сделайте минимальный тест на одной сущности, сохраните входные данные и ответ метода, а затем расширяйте решение на массовый сценарий.

На коробке удобнее добавлять временное логирование рядом с местом выполнения кода, а в облаке — сохранять входящие и исходящие REST-запросы в свой журнал интеграции.

Частые ошибки

Не правьте ядро и не отключайте права как быстрый фикс. После обновления такой костыль обычно ломается повторно и усложняет диагностику.

  • Проверять сценарий только под администратором и не видеть проблему прав обычного пользователя.
  • Пытаться решить доступ скрытием элемента интерфейса, хотя данные остаются доступны через другой путь.
  • Не логировать фактический запрос и ответ, из-за чего ошибка выглядит случайной.

Минимальный пример

Пример показывает только форму вызова. ID, права, обработчики и поля нужно заменить под свой портал.

$fp = fsockopen('ssl://example.com', 443, $errno, $errstr, 10);

if (!$fp) {
    echo $errno . ': ' . $errstr;
} else {
    fclose($fp);
    echo 'OK';
}