Ошибка Call to undefined function curl_init() в PHP: причины и решение
Почему возникает ошибка?
Ошибка Call to undefined function curl_init() означает, что расширение cURL не установлено или не включено в вашей конфигурации PHP. cURL — это не встроенная функция, а отдельное расширение, которое требует установки и активации.
Решение для Windows (OpenServer, XAMPP, WAMP)
В большинстве локальных серверов (OpenServer, XAMPP, Denver) cURL уже включен по умолчанию, но иногда его нужно активировать вручную.
Шаг 1: Проверка наличия расширения
Создайте файл info.php с кодом:
<?php phpinfo(); ?>
Запустите его и найдите секцию curl. Если её нет — переходите к шагу 2.
Шаг 2: Включение расширения в php.ini
Откройте файл php.ini (обычно находится в папке PHP вашего сервера). Найдите строку:
;extension=curl
Удалите точку с запятой в начале строки, чтобы стало:
extension=curl
Важно: В разных версиях PHP имя может отличаться:
- PHP 7.4 и старше:
extension=php_curl.dll - PHP 8.0+:
extension=curl(илиextension=php_curl.dll)
Убедитесь, что файл php_curl.dll существует в папке ext рядом с php.ini.
Шаг 3: Проверка зависимостей (OpenServer)
В OpenServer cURL может не работать, если отсутствуют библиотеки Visual C++ Redistributable. Скачайте и установите последнюю версию с официального сайта Microsoft.
Шаг 4: Перезапуск сервера
После изменений обязательно перезапустите веб-сервер (Apache/Nginx). Проверьте phpinfo() снова — секция curl должна появиться.
Решение для Linux (Ubuntu/Debian)
Установите расширение через менеджер пакетов:
sudo apt update
sudo apt install php-curl
После установки перезапустите веб-сервер:
sudo systemctl restart apache2
Или для Nginx + PHP-FPM:
sudo systemctl restart php8.1-fpm
Проверка работоспособности
После включения расширения ваш код должен работать. Вот полный пример с обработкой ошибок:
<?php
$ch = curl_init('https://api.example.com/data');
if ($ch === false) {
die('Ошибка инициализации cURL');
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // только для тестов!
$response = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Ошибка cURL: ' . curl_error($ch);
} else {
echo $response;
}
curl_close($ch);
?>
Альтернативный способ: file_get_contents()
Если cURL включить не удаётся, для простых GET-запросов можно использовать:
<?php
$response = file_get_contents('https://api.example.com/data');
if ($response === false) {
echo 'Ошибка получения данных';
} else {
echo $response;
}
?>
Но это работает только если в php.ini включена директива allow_url_fopen = On.
Альтернативный подход: установка cURL через Composer
Если стандартные методы не помогают (например, на хостинге без доступа к php.ini), можно использовать библиотеку GuzzleHttp, которая использует cURL под капотом, но устанавливается через Composer и не требует прямого вызова curl_init().
Установка:
composer require guzzlehttp/guzzle
Пример использования:
<?php
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$response = $client->get('https://api.example.com/data');
$body = $response->getBody();
echo $body;
?>
Что делать, если cURL не работает на хостинге?
Напишите в техподдержку хостинга с просьбой включить расширение curl. Обычно это делается через панель управления (например, cPanel → Select PHP Version → Extensions) или через запрос в тикет-систему. Если хостинг не поддерживает cURL — смените провайдера, так как без cURL современная веб-разработка практически невозможна.
Диагностика проблемы
Выполните в терминале:
php -m | grep curl
Если curl не отображается — проблема в настройках PHP. Если отображается, но скрипт выдаёт ошибку — проверьте, какой именно php.ini использует веб-сервер (часто он отличается от CLI-версии).
Ответов пока нет.
Войдите чтобы оставить ответ
Блоги
Рефакторинг legacy кода на C++: стратегии и примеры