2016-11-09 2 views
2

я установил pecl_http, но когда я пытаюсь использовать его, я получаю сообщение об ошибке:PECL_HTTP установлен, но не работает

Fatal error: Uncaught Error: Call to undefined function http_get() in /opt/lampp/htdocs/tes_http.php:3 Stack trace: #0 {main} thrown in /opt/lampp/htdocs/tes_http.php on line 3

Это моя php.ini конфигурация:

extension="propro.so" 
extension="http.so" 
extension="raphf.so" 
[PHP] 

;;;;;;;;;;;;;;;;;;; 

Пожалуйста помогите мне понять, почему функция недоступна.

+0

Если вы еще не включили '; extension = php_http.dll' в свой файл' php.ini'. Просто удалите точки с запятой и после этого перезапустите Apache Server. –

ответ

2

Текущая версия http расширения (в package имя является pecl_http) не обеспечивает http_get() функцию. Эта функция была удалена в версии 2.0.0 (сразу после версии 1.7.6). Вы можете увидеть его, выполнив следующие команды в терминале:

git clone https://github.com/m6w6/ext-http.git 
cd ext-http 
git diff RELEASE_1_7_6 RELEASE_2_0_0 

Хотя не упоминается явно в changelog, процедурный стиль полностью заменяется стиле ООП во втором варианте.

documentation on PHP's official site является устаревшим. Автор расширения разместил новую версию на his own site. Я бы не стал его сильно обвинять, поскольку ссылка на документацию на PECL site указывает на нужное место. Несомненно, он должен удалить старую документацию от php.net/manual или хотя бы обновить ее.

Новый способ выполнения HTTP GET запросов подразумевает использование http\Client\Request класса:

$request = new http\Client\Request("GET", 
    "http://example.com", 
    ["User-Agent"=>"MyAgent/0.1"] 
); 
$request->setOptions(["timeout" => 1]); 

$client = new http\Client; 
$client->enqueue($request)->send(); 

$response = $client->getResponse(); 

Относно установки

Вы должны загрузить зависимости перед темhttp.so, как это рекомендуется в documentation:

; obligatory deps 
extension = raphf.so 
extension = propro.so 

; if shared deps were enabled 
extension = hash.so 
extension = iconv.so 
extension = json.so 

; finally load pecl/http 
extension = http.so 
+0

Я использую ваш скрипт, но у меня все еще есть ошибка Неустранимая ошибка: Не удалось Ошибка: Class 'http \ Client \ Request' не найден в /opt/lampp/htdocs/tes_http.php:3 Трассировка стека: # 0 {main } брошен в /opt/lampp/htdocs/tes_http.php в строке 3 – Herdy

+0

@Herdy, что такое вывод для var_dump (extension_loaded ('http')); '? Является ли расширение присутствующим в выводе 'phpinfo();'? –

+0

Да, я получил выход вроде этого bool (false) вы знаете, как это решить? Я использую Ubuntu 14.04 LTS, PHP 7 и LAMPP @Ruslan – Herdy

Смежные вопросы