Avatar ·

Ошибка Call to undefined function curl_init() в PHP: причины и решение

Всем привет! Я новичок в PHP и пытаюсь сделать простой HTTP-запрос к внешнему API через cURL. Написал такой код: ```php ``` Но при запуске скрипта получаю фатальную ошибку: **Call to undefined function curl_init()**. Я проверил, что PHP установлен, версия 8.1. Подскажите, пожалуйста, что делать? Нужно ли что-то включать в php.ini? Или может быть эта функция удалена в новых версиях PHP? Заранее спасибо за помощь! Дополнительно: я работаю на Windows, использую OpenServer. В phpinfo() я не вижу секции cURL. Пробовал гуглить, но советы разнятся — кто-то говорит про установку libcurl, кто-то про включение extension=php_curl.dll в php.ini. У меня в папке ext есть файл php_curl.dll, но он почему-то не подгружается. Может быть, проблема в том, что у меня нет прав администратора? Или нужно переустановить 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-версии).