PECL_HTTP无法识别php ubuntu

时间:2013-11-26 21:13:43

标签: php httprequest

我正在尝试使用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

我可能错过了哪些可能的错误?

更新 :(更改了标题)

扩展未在phpinfo()中显示,我设置

extension=http.so

并检查http.so文件是否在我的extension_dir中。我真的不知道如何让php识别扩展名。

更新2 : 我设法安装扩展,但该类仍然不存在。 对于其他人,我不得不参考pecl_http需要的其他扩展。 (对我而言:propro.soraphfr.so

更新3 : 我没有设法使类可见,下面的答案显示了其他类的一些方法。

我使用CURL解决了这个问题。

2 个答案:

答案 0 :(得分:4)

您已安装新版本的扩展程序,它使用完全不同的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()返回响应正文。

我无法测试这些例子,但我听说过其他人在工作。

答案 1 :(得分:1)

我遇到了同样的问题并通过安排在php.ini

中加载扩展名的顺序解决了这个问题

我在/etc/php5/mods_available中使用自己的.ini文件加载了所有其他扩展程序。 在我的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