我已经安装了 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]
;;;;;;;;;;;;;;;;;;;
请帮我弄清楚为什么该功能不可用。
最佳答案
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 中没有明确提及, 在第二个版本中,过程式风格被完全替换为 OOP 风格。
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
关于php - PECL_HTTP 已安装,但不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40500051/