PECL_HTTP не распознан php ubuntu

Я пытаюсь использовать класс HttpRequest, который должен быть в расширении php PECL_HTTP. У меня php5 и для установки pecl_http используется следующее.

sudo pecl install pecl_http pecl/pecl_http is already installed and is the same as the released version 2.0.1 install failed 

После этого я вхожу в свой php.ini:

 [PHP] extension=http.so [...] 

Затем я перезапущу свой сервер apache2 и попробую использовать класс HttpRequest, но он дает мне следующую ошибку:

 PHP Fatal error: Class 'HttpRequest' not found 

Каковы возможные ошибки, возможно, я пропустил?

UPDATE : (Изменено название)

Расширение не отображается в phpinfo (), я устанавливаю

 extension=http.so 

И проверил, находится ли файл http.so в моем extension_dir . Я действительно не знаю, как заставить php распознавать расширение.

ОБНОВЛЕНИЕ 2 : мне удалось установить расширение, но класс все еще не существует. Для других мне приходилось ссылаться на другие расширения pecl_http. (Для меня: propro.so , raphfr.so )

ОБНОВЛЕНИЕ 3 : Мне не удалось сделать класс видимым, ответы ниже показывают некоторые подходы к другим классам.

Я решил эту проблему, используя CURL.

Вы установили новую версию расширения, которая использует совершенно другой API. Я до сих пор не знаю, как это работает, но я уточню свой ответ, который я знаю. Документацию по новой версии можно найти по адресу http://devel-m6w6.rhcloud.com/mdref/http .

Чтобы установить старую версию, сначала удалите новый документ, а затем выполните

 pecl install http://pecl.php.net/get/pecl_http-1.7.6.tgz 

ОБНОВЛЕНИЕ: вот два примера из документации, оба должны хорошо работать:

один запрос (можно найти по адресу http://devel-m6w6.rhcloud.com/mdref/http/Client/enqueue ):

 <?php (new http\Client)->enqueue(new http\Client\Request("GET", "http://php.net"), function(http\Client\Response $res) { printf("%s returned %d\n", $res->getTransferInfo("effective_url"), $res->getResponseCode()); return true; // dequeue })->send(); 

несколько запросов (можно найти по адресу http://devel-m6w6.rhcloud.com/mdref/http/Client/once ):

 <?php $client = new http\Client; $client->enqueue(new http\Client\Request("HEAD", "http://php.net")); $client->enqueue(new http\Client\Request("HEAD", "http://pecl.php.net")); $client->enqueue(new http\Client\Request("HEAD", "http://pear.php.net")); printf("Transfers ongoing"); while ($client->once()) { // do something else here while the network transfers are busy printf("."); // and then call http\Client::wait() to wait for new input $client->wait(); } printf("\n"); while ($res = $client->getResponse()) { printf("%s returned %d\n", $res->getTransferInfo("effective_url"), $res->getResponseCode()); } 

В обоих примерах вы можете использовать $res->getBody() чтобы вернуть тело ответа.

Я не мог проверить эти примеры, но я слышал о других людях, что они работают.

У меня была такая же проблема, и я решил ее, упорядочив порядок, в котором расширения загружаются в php.ini

Все мои другие расширения были загружены с использованием собственных .ini-файлов в /etc/php5/mods_available . В моем apache2 error.log я заметил, что json_decode был необходим http.so для загрузки.

Я создал файл для http (http.ini) и символическую ссылку в /etc/php5/apache/conf.d с более высоким префиксом, чем json.

мой http.ini


 ; configuration for php http module ; priority=50 extension=raphf.so extension=propro.so extension=http.so 

используйте новый pecl_http.2.0.6, как это

 new http\Message(); 

или расширяться в вашем собственном классе, поскольку расширяет http \ Message