PHP 8.5: Функции `curl_close()` и `curl_share_close()` объявлены устаревшими

Если ваши логи в PHP 8.5 заполонили предупреждения об устаревании `curl_close()` — не игнорируйте их. Эти функции действительно стали бесполезными, и их вызов теперь лишь шум. В PHP 8.0 cURL-дескрипторы превратились в объекты, а в PHP 8.5 от пустых функций окончательно решили избавиться. Разбираемся, что это значит для вашего кода.

В PHP 8.0 расширение cURL претерпело важное изменение: ресурсы были преобразованы в полноценные объекты. Вместо ресурсных дескрипторов теперь используются объекты CurlHandle (создаваемые функцией curl_init) и CurlShareHandle (создаваемые функцией curl_share_init). Это преобразование сделало явное освобождение ресурсов через специальные функции избыточным, поскольку жизненный циклом объектов теперь управляет сам PHP — они автоматически уничтожаются сборщиком мусора при выходе из области видимости или при явном вызове unset().

Начиная с PHP 8.5, функции curl_close() и curl_share_close() официально объявлены устаревшими. Причина проста: начиная с PHP 8.0 эти функции не выполняют никаких полезных действий, они стали "пустышками". Их вызов в PHP 8.5 и новее будет приводить к генерации предупреждения об устаревании (deprecation notice):

$ch = curl_init();
curl_close($ch); // Function curl_close() is deprecated since 8.5, as it has no effect since PHP 8.0
$sh = curl_share_init();
curl_share_close($sh); // Function curl_share_close() is deprecated since 8.5, as it has no effect since PHP 8.0

Рекомендуемая замена

Поскольку функции перестали выполнять полезную работу ещё в PHP 8.0, их можно и нужно удалять из кода. Начиная с PHP 8.0 для явного освобождения дескриптора достаточно использовать unset() или присвоить переменной значение null:

-curl_close($ch);
+unset($ch);
-curl_share_close($sh);
+unset($sh);

Если ваш код должен работать в средах с PHP 8.5 или новее, но при этом сохранять обратную совместимость со старыми версиями (где curl_close() ещё была необходима), используйте условную проверку. Это позволит избежать предупреждений об устаревании в новых версиях, не ломая функциональность в старых:

-curl_close($ch);
+if (PHP_VERSION_ID >= 80000) {
+ unset($ch);
+} else {
+ curl_close($ch);
+}

Это изменение — часть общей тенденции PHP к отказу от ресурсов в пользу объектов, что улучшает предсказуемость управления памятью и согласуется с современной объектно-ориентированной архитектурой языка. Удаление устаревших вызовов сделает ваш код чище и подготовит его к будущим версиям, где эти функции могут быть удалены полностью.

Комментарии


Дополнительные материалы

Предыдущая Статья

PHP 8.5: Функция mysqli_execute объявлена устаревшей

Следующая Статья

PHP 8.5: Функция `xml_parser_free` объявлена устаревшей