Как подключить cURL к PHP - пошаговая настройка
Введение в установку 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-curlPhp 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);
?>