Перейти к содержанию

Исправление медлительности сторонних подключений в CS-Cart

Последствия

Использование внешних подключений (к сторонним сервисам) без таймаутов может привести к сбоям сайта при недоступности этих сервисов. Настоятельно рекомендуем не применять curl_init, file_get_contents и аналогичные функции без ограничения времени выполнения. Для CS-Cart оптимальным решением является использование TyghHttp для внешних запросов, а также соблюдение стандартов кодирования платформы.

Чем опасен код без таймаутов?

  1. База данных: при исчерпании рабочих процессов MySQL очередь запросов начнет расти, но пользователи не смогут получить доступ к сайту. Это частая причина недоступности ресурса;
  2. PHP: если все PHP-процессы будут заняты, очередь HTTP-запросов переполнится, что в большинстве случаев приведет к ошибкам подключения к базе данных.

Рекомендация

Пример кода, соответствующего стандартам CS-Cart:

<?php
use Tygh\Http;
///...
$url = 'https://some-api.scalehost.ru';
$extra = ['headers' => ['timeout' => 3],
        'basic_auth' => [$login,$password]];
$data = ['param' => 'value'];

$response = Http::get($url, $data, $extra);
$response = json_decode($response, true);
//...

Мы не просто хостинг-провайдер. Наша экспертиза основана на глубоком анализе CS-Cart и популярных модулей. Мы выявляем уязвимости, оптимизируем производительность и обеспечиваем стабильность сайтов.

Плохие примеры

curl_*

Не имеет настроек таймаутов.

<?php
//...
} elseif (!empty($new_image_data_array['url'])) {

$ch = curl_init($new_image_data_array['url']);
$fp = fopen($image_data['absolute_path'], 'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
$optimized = 'Y';
} else {
//...

file_get_contents

Устаревший метод из 1990-х, который часто становится причиной проблем.


Нужна помощь?

Если у вас возникли сложности, требуются доработки, бесплатная консультация или оценка проекта — обращайтесь. Мы поможем найти решение для роста вашего бизнеса. Свяжитесь с нами по электронной почте.