Как подключить cURL к PHP - пошаговая настройка

Раздел: PHP -> Установка и настройка cURL

Введение в установку PHP cURL

Расширение cURL (Client URL Library) позволяет PHP-скриптам взаимодействовать с различными серверами по протоколам HTTP, FTP, SMTP и другим. Без него невозможно выполнять запросы к API, парсить удаленные страницы или загружать файлы. Ниже приведены пошаговые инструкции для разных окружений.

Основное решение - установка через пакетный менеджер на Debian/Ubuntu

Как установить cURL на PHP в системах на базе Debian (Ubuntu, Linux Mint)?

Наиболее распространенный способ - использовать apt. Выполните в терминале:

sudo apt update
sudo apt install php-curl

Php curl install (установка php curl)

После установки перезапустите веб-сервер (Apache/Nginx) или PHP-FPM:

sudo systemctl restart apache2   # для Apache
sudo systemctl restart php8.1-fpm  # для PHP-FPM (версию уточните)

Проверьте подключение расширения через phpinfo() или командой:

php -m | grep curl

Если расширение не появилось, проверьте файл php.ini - строка extension=curl должна быть раскомментирована.

Типичная ошибка: после установки curl не отображается в phpinfo. Причина - установлен не тот пакет (например, php8.1-curl для версии PHP 8.1). Уточните версию PHP командой php -v и установите соответствующий пакет, например:

sudo apt install php8.2-curl

Вариант 1: Установка на CentOS/RHEL (yum/dnf)

Как добавить cURL в PHP на дистрибутивах с RPM-пакетами?

В CentOS 7 (yum) или RHEL 8/9 (dnf) выполните:

sudo yum install php-curl        # CentOS 7
sudo dnf install php-curl        # CentOS 8/9

Для PHP версии 7.x или 8.x может потребоваться уточнить репозиторий (например, Remi). После установки перезапустите веб-сервер.

Проблема: пакет php-curl не найден. Решение - подключить репозиторий EPEL или Remi:

sudo yum install epel-release
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm  # для CentOS 7

Вариант 2: Установка на Windows (ручное включение)

Как активировать cURL в PHP под Windows?

В Windows расширение обычно идет в составе дистрибутива, но отключено по умолчанию. Отредактируйте файл php.ini:

; Раскомментируйте строку (уберите точку с запятой):
extension=curl
; Убедитесь, что директория ext (например, C:\php\ext) содержит php_curl.dll

Также скопируйте файл libssh2.dll (для некоторых версий) из папки PHP в системную папку или в каталог с Apache. Перезапустите веб-сервер и проверьте phpinfo().

Ошибка: "Unable to load dynamic library 'php_curl.dll'" - отсутствует зависимость (libeay32.dll, ssleay32.dll или libssh2.dll). Решение - скачать эти DLL из редистрибутива OpenSSL или использовать сборку PHP с включенным curl (например, от php.net с thread-safe).

Вариант 3: Установка на macOS через Homebrew

Как подключить cURL к PHP на macOS?

Если PHP установлен через Homebrew, расширение ставится отдельно:

brew install php@8.1
# или для существующей установки:
pecl install curl    # (не всегда работает, лучше через политику PHP)

Чаще всего cURL уже встроен. Убедитесь в php.ini (/usr/local/etc/php/8.1/php.ini) нет комментария перед extension=curl. Перезагрузите PHP-FPM через brew.

Вариант 4: Установка в Docker-контейнере

Как добавить cURL в образ PHP для Docker?

В Dockerfile используйте официальный образ и установите расширение через apt или docker-php-ext-install:

FROM php:8.2-apache
RUN docker-php-ext-install curl
# или через apt:
# RUN apt-get update && apt-get install -y libcurl4-openssl-dev && docker-php-ext-install curl

После сборки контейнера curl будет доступен.

Вариант 5: Компиляция из исходных кодов

Как собрать cURL вручную при сборке PHP?

Этот способ используется редко, но может понадобиться для нестандартных окружений. При конфигурации PHP укажите флаг --with-curl:

./configure --with-curl=/path/to/curl
make
make install

Предварительно установите библиотеку libcurl-dev (или libcurl4-openssl-dev). Проверьте, что в системе установлен сам curl.

Проверка установки cURL

Как убедиться, что cURL работает в PHP?

Создайте файл test.php:

<?php
phpinfo();
?>

Откройте его в браузере и найдите секцию "curl". Или выполните консольную команду:

php -r "echo extension_loaded('curl') ? 'cURL OK' : 'cURL not loaded';"

Результат:

cURL OK

Расширенные примеры использования cURL в PHP

Ниже приведены практические сценарии с комментариями и результатами выполнения.

1. Простой GET-запрос

Пример
<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://httpbin.org/get");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
if (curl_errno($ch)) {
    echo 'Ошибка: ' . curl_error($ch);
} else {
    echo $response;
}
curl_close($ch);
?>

Вывод:

{
  "args": {}, 
  "headers": {
    "Accept": "*/*", 
    "Host": "httpbin.org", 
    "User-Agent": "curl/8.4.0"
  }, 
  "origin": "123.123.123.123", 
  "url": "https://httpbin.org/get"
}

2. POST-запрос с передачей данных

Пример
<?php
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://httpbin.org/post",
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query(['name' => 'Иван', 'age' => 30]),
    CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

Вывод:

{
  "form": {
    "age": "30", 
    "name": "Иван"
  }, 
  "headers": {
    "Content-Type": "application/x-www-form-urlencoded", 
    ...
  },
  "json": null,
  "origin": "...",
  "url": "https://httpbin.org/post"
}

3. Отправка файла через multipart/form-data

Пример
<?php
$file = new CURLFile('/path/to/file.txt', 'text/plain', 'uploaded_file.txt');
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => "https://httpbin.org/post",
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => ['file' => $file],
    CURLOPT_RETURNTRANSFER => true,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
?>

4. Установка пользовательских заголовков и обработка cookies

Пример
<?php
$ch = curl_init("https://example.com/");
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        'User-Agent: MyCustomBot/1.0',
        'Accept-Language: ru-RU,ru;q=0.9',
    ],
    CURLOPT_COOKIE => 'session_id=123abc; token=xyz',
    CURLOPT_COOKIEFILE => 'cookies.txt', // читать cookies из файла
    CURLOPT_COOKIEJAR => 'cookies.txt',  // записывать cookies после запроса
]);
$response = curl_exec($ch);
curl_close($ch);
?>

5. Работа с прокси-сервером

Пример
<?php
$ch = curl_init("https://api.ipify.org");
curl_setopt_array($ch, [
    CURLOPT_PROXY => "http://proxy.example.com:8080",
    CURLOPT_PROXYUSERPWD => "user:pass",
    CURLOPT_RETURNTRANSFER => true,
]);
echo curl_exec($ch);
curl_close($ch);
?>

6. Многопоточные запросы (curl_multi)

Пример
<?php
$urls = ['https://httpbin.org/get', 'https://example.com', 'https://google.com'];
$mh = curl_multi_init();
$handles = [];
foreach ($urls as $i => $url) {
    $handles[$i] = curl_init($url);
    curl_setopt($handles[$i], CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($mh, $handles[$i]);
}
$active = null;
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM); // ждем завершения

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

foreach ($handles as $i => $ch) {
    $content = curl_multi_getcontent($ch);
    echo "URL $i: длина " . strlen($content) . " байт\n";
    curl_multi_remove_handle($mh, $ch);
}
curl_multi_close($mh);
?>

7. Отладка запросов (вывод информации)

Пример
<?php
$ch = curl_init("https://httpbin.org/get");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
$verbose = fopen('php://temp', 'w+');
curl_setopt($ch, CURLOPT_STDERR, $verbose);
$response = curl_exec($ch);
rewind($verbose);
$verboseLog = stream_get_contents($verbose);
echo "Заголовки вывода:\n$verboseLog";
curl_close($ch);
?>

Установка PHP cURL - comments

En
Php curl install (php)