Fatal error: Call to undefined function curl_init()
05.01.2012
Здравствуй уважаемый читатель блога LifeExample, у тебя бывало такое, когда знаешь, что код должен работать, но вместо ожидаемого результата компилятор говорит об обнаруженной фатальной ошибке? Я уверен, что бывало, так вот сегодня мне пришлось потратить не мало времени на устранение ошибки такого содержания Fatal error: Call to undefined function curl_init() , которое гласит о том, что функция curl_init() неизвестна компилятору, и нигде не определенна. Такая ошибка вызвала небольшое удивление, ибо код скрипта в котором содержится вызов curl_init() использовался мной на других хостингах без проблем, что позволило мне предположить о не правильности настроек файла php.ini.
Стоит отметить, что локальный хостинг на котором проявилась данная ошибка, организован с помощью набора дистрибутивов Denwer, достаточно популярном инструменте, начинающих веб разработчиков.
Первая самостоятельная попытка решения проблемы Fatal error: Call to undefined function curl_init() не увенчалась успехом. Первым действием был анализ файла php.ini , найдя в котором закомментированную строку:
;extension=php_curl.dll
я был уверен, что в этом кроется загвоздка. Удалив в начале строки точку с запятой “;”, и попробовав обновить страницу скрипта, снова получил сообщение об ошибке. Вновь принялся за изучения php.ini и нашел еще одну интересную строку:
extension_dir = «/usr/local/php5/ext»
Cодержание, которой говорит php компилятору, о том, в какой директории лежат все подключаемые dll библиотеки. Перейдя в директорию с удивлением обнаружил, отсутствие необходимого файла php_curl.dll. Поискав по просторам интернета, все таки нашел отсутствующую библиотеку php_curl.dll и загрузил ее в /usr/local/php5/ext . Как ни странно, но результата это не дало, вновь пришлось лицезреть сообщение: Fatal error: Call to undefined function curl_init().
Перечитав кучу форумов стал опускать руки, и уже хотел без помощи денвера самостоятельно поднять связку Apache, PHP и MySQL , дабы иметь полноценный комплект dll библиотек, включая и необходимую php_curl.dll , к счастью мне вовремя подвернулась правильная последовательность выполнения действий для решения данной задачи.
Исправление ошибки “Fatal error: Call to undefined function curl_init()”
Скачиваем пакет библиотек для расширения возможностей набора denwer.
Запускаем скачанный архив, в процессе установки он самостоятельно добавит нужную php_curl.dll , а также другие отсутствующие библиотеки.
Открываем директорию, в которую установлен denwer, а именно каталог с данными PHP. Обычно это директория: c:\WebServers\usr\local\php5\.
Копируем из данной директории файлы ssleay32.dll и libeay32.dll , вставляем их в каталог C:\WINNT\SYSTEM32.
Открываем файл C:\WebServers\usr\local\php5\php.ini находим в нём строку “;extension=php_curl.dll”, и убираем точку с запятой вначале. (Внимание! Если ты до установки расширений из пункта №1 , уже проделывал данную операцию, не поленись вновь это повторить, ибо при установки данного пакета, файл php.ini перезаписывается).
Перезапускаем denwer.
Радуемся работе всех необходимых функций!
Данная последовательность действий является оптимальной для решения подобной проблемы при использовании утилиты denwer. Если же вы столкнулись с Fatal error: Call to undefined function curl_init(), не спользуя денвер, то вам следует покапаться в настройках php.ini , и вероятнее всего обратиться с своему хостинг-провайдеру.
Я столкнулся с такой же проблемой по поводу библиотеки php_openssl.dll. Сначала попытался вставить туда библиотеку взятую из другого места и добавить строку в php.ini. Не получилось — появилось сообщение об ошибке. Потом разобрался, почему так происходит. В предыдущих версиях Denwer’а использовались версии PHP, которые компилировались на C++ версии 6, а в последнем Denwer’е, уже PHP, скомпилированный на C++ версии 9. На сайте php.net можно найти разные, в том числе и достаточно старые версии PHP, и в них указывается в номере версии либо шестёрка, либо девятка. Получается, что библиотеки от 6-х версий не подходят к 9-м. Свою проблему решил так же, как и ты — скачал дополнительные модули на сайте Denwer’а.
проблема бывает в том что я только что мучался два часа с такой же ошибкой.
фишка в том что объявив функцию в классе
я ее вызываю через $method(); а надо вызывать через $this->$method();
1 2
$method(); //Ошибка
$this->$method();// Нет ошибки
Комментарии
Вопрос.А каким компилятором вы пользуетесь? phpDesigner хороший?
Пользуюсь блокнотом notepad++.
Про phpDesigner и другие IDE ничего не знаю.
Я столкнулся с такой же проблемой по поводу библиотеки php_openssl.dll. Сначала попытался вставить туда библиотеку взятую из другого места и добавить строку в php.ini. Не получилось — появилось сообщение об ошибке. Потом разобрался, почему так происходит. В предыдущих версиях Denwer’а использовались версии PHP, которые компилировались на C++ версии 6, а в последнем Denwer’е, уже PHP, скомпилированный на C++ версии 9. На сайте php.net можно найти разные, в том числе и достаточно старые версии PHP, и в них указывается в номере версии либо шестёрка, либо девятка. Получается, что библиотеки от 6-х версий не подходят к 9-м. Свою проблему решил так же, как и ты — скачал дополнительные модули на сайте Denwer’а.
Спасибо!
Блин, спасибо тебе чувак
Пожалуйста )
Спасибо огромное! Выручил
Спасибо!
В ubuntu/debian всё проще решается…
sudo apt-get install php5-curl
Спасибо — помогло
Каждому своё
проблема бывает в том что я только что мучался два часа с такой же ошибкой.
фишка в том что объявив функцию в классе
я ее вызываю через $method(); а надо вызывать через $this->$method();
2
$this->$method();// Нет ошибки
Sergei, надо вызивать без бакса)
так: method();
Спасибо!
Мне помогло добавление в системную переменную PATH пути к директории интерпретатора PHP. Источник: Функция Curl_init