PHP 8.5: Функции `curl_close()` и `curl_share_close()` объявлены устаревшими
В 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 к отказу от ресурсов в пользу объектов, что улучшает предсказуемость управления памятью и согласуется с современной объектно-ориентированной архитектурой языка. Удаление устаревших вызовов сделает ваш код чище и подготовит его к будущим версиям, где эти функции могут быть удалены полностью.