PHP致命错误:未找到“HttpRequest”类

10

我一直在尝试多种方法解决这个问题,在阅读了很多文章之后仍然没有成功。 我使用 Mac,OSX 10.7 Lion,正在使用 MAMP 编写一个 WordPress 网站的插件(php 文件),在某个时候我需要进行 HTTP 请求:

$request = new HttpRequest('something'); 
$request->setMethod(HTTP_METH_GET);

执行此请求时出现错误,检查日志文件后,以下是消息:

"PHP Fatal error:  Class 'HttpRequest' not found in (the_php_file)"

我已经安装了PEAR、PECL和HTTP扩展(pecl_http)、Xcode及其命令行工具。我所做的如下:

  • 修改了路径:

    $ echo "export PATH=/Applications/MAMP/bin/php/php5.5.3/bin:$PATH" >> ~/.profile`
    
  • 确认php、pear和pecl的路径是否正确:

    • /Applications/MAMP/bin/php/php5.3.6/bin/php是php的路径
    • /Applications/MAMP/bin/php/php5.3.6/bin/pear是pear的路径
    • /Applications/MAMP/bin/php/php5.3.6/bin/pecl是pecl的路径
  • 我从MAMP页面下载了php的源代码(并检查了我所下载的版本是否与我使用的版本相同,即php5.5.3)。然后我提取了内容并将其放到/Applications/MAMP/bin/php/php5.5.3/include/php中。

  • 在/Applications/MAMP/bin/php/php5.5.3/include/php目录中运行./configure
  • 我执行了 pecl install pecl_http
  • 我还将这些扩展添加到了php.ini文件中(最初,我修改了MAMP/bin/php/php5.5.3/conf/php.ini文件):

  • extension=raphf.so
    extension=propro.so
    extension="http.so"
    

关于最后一个带引号的扩展名:当我手动添加扩展时,我是这样做的:extension=http.so。然后(在尝试修复问题时),我尝试了一种自动修改php.ini的替代安装方式,并用引号将扩展名括起来,但结果仍然相同,没有任何区别。

经过所有这些操作,我停止了MAMP服务器并重新启动它,但当我执行php时,我仍然得到错误提示(在php_error.log中可见):

PHP Fatal error:  Class 'HttpRequest' not found

我主要遵循了这个指南,当然还有许多其他的: http://www.lullabot.com/blog/article/installing-php-pear-and-pecl-extensions-mamp-mac-os-x-107-lion

如果您有任何想法,我将非常感激,因为我已经没有更多想法了。


你找到了你的问题的解决方案吗? - Neo
2个回答

26

HttpRequest类是由这个PECL扩展的v1提供的。

重新安装方式: $ pecl install -f pecl_http-1.7.6

您可以在此处找到v2的文档: https://mdref.m6w6.name/http


我执行了这个命令,但是出现了错误:“包“pecl.php.net/pecl_http”没有可用的版本”。我该怎么修复呢,兄弟? - Neo
取决于你的PHP版本。附加与你的PHP版本兼容的适当pecl_http版本。 - m6w6

3

如果您无法控制某些环境变量或安装软件包,则可以尝试使用curl,它应该返回一个JSON对象(以下是Google API调用的工作示例)。

$url = 'https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=TOKEN_DATA_123';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
$json = json_decode($response, true);
curl_close($ch);
print_r($json);
$userEmail = $json["email"];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接