70

我在 POST Request 中尝试PHP Post Request,认为它可能对我有用。我的代码如下:

$sub_req_url = "http://localhost/index1.php";

$ch = curl_init($sub_req_url);
$encoded = '';

// include GET as well as POST variables; your needs may vary.
foreach($_GET as $name => $value) {
  $encoded .= urlencode($name).'='.urlencode($value).'&';
}

foreach($_POST as $name => $value) {
  $encoded .= urlencode($name).'='.urlencode($value).'&';
}

// chop off last ampersand
$encoded = substr($encoded, 0, strlen($encoded)-1);

curl_setopt($ch, CURLOPT_POSTFIELDS,  $encoded);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_exec($ch);
curl_close($ch);

来自index.php文件并且index2.php是同一目录中的另一个文件,当我打开页面时,我的error.log文件中出现以下错误:

[Sat Dec 18 15:24:53 2010] [error] [client ::1] PHP Fatal error:  Call to undefined function curl_init() in /var/www/testing1/index.php on line 5

我想要做的是有一个发送帖子请求的预订表格。然后我想处理发布值并再次将发布请求发送到贝宝。

4

24 回答 24

141

您需要为 php 安装 CURL 支持。

在 Ubuntu 中,您可以通过以下方式安装它

sudo apt-get install php5-curl

如果您使用 apt-get,则无需编辑任何 PHP 配置,但需要重新启动 Apache。

sudo /etc/init.d/apache2 restart

如果您仍然遇到问题,请尝试使用phpinfo()确保 CURL 被列为已安装。(如果不是,那么您可能需要打开另一个问题,询问为什么您的软件包没有安装。)

PHP CURL 文档中有安装手册。

于 2010-12-18T09:48:58.190 回答
27

对于 Windows,如果有人感兴趣,请从 php.ini 中取消注释以下行(通过删除 ;)

;extension=php_curl.dll

重启apache服务器。

于 2013-06-30T15:39:56.997 回答
8

我通过以下步骤在 ubuntu 16.04 中工作。我的 php 版本是 7.0

sudo apt-get install php7.0-curl

sudo 服务 apache2 重启

我从这个链接得到它在这里查看更多细节

于 2017-08-07T05:29:33.610 回答
6

对于 Ubuntu:extension=php_curl.so如有必要,添加到 php.ini 以启用。然后sudo service apache2 restart

通常是自动处理的,但在某些情况下(例如,在共享开发环境中)可能需要手动重新启用。

指纹将匹配所有这三个条件:

  1. curl_init() 调用上的致命错误
  2. 在 php_info 中会看到 curl 模块作者(表示 curl 已安装且可用)
  3. 同样在 php_info 中,您将看到没有 curl 配置块(表明 curl 未加载)
于 2015-03-15T13:28:05.133 回答
3

为了修复这个错误,我做了:

  1. php.ini文件中,取消注释此行:extension=php_curl.dll
  2. php.ini文件中,取消注释此行:extension_dir = "ext"
  3. 我重新启动了 NETBEANS,因为我使用的是内置服务器
于 2014-10-31T17:17:15.433 回答
3

就我而言,在 Xubuntu 中,我必须安装 libcurl3 libcurl3-dev 库。使用此命令一切正常:

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl
于 2015-01-30T17:05:30.797 回答
3

只需为您的系统中安装了多个 PHP 版本的情况添加我的答案,并且您确定您已经安装了该php-curl软件包,但 Apache 仍然给您同样的错误。

即使在 PHP 7 中启用了 php-curl,curl_init() 也未定义。

于 2017-02-18T05:33:15.500 回答
3

第 1 步

C:/(path to php folder)/php.ini
enable extension=php_curl.dll

(删除;行尾的)

第 2 步

将此添加到Apache/conf/httpd.conf(libeay32.dll、ssleay32.dll、libssh2.dll 直接在 php7 文件夹中找到)

# load curl and open ssl libraries
 LoadFile "C:/(path to php folder)/libeay32.dll"
 LoadFile "C:/(path to php folder)/ssleay32.dll"
 LoadFile "C:/(path to php folder)/libssh2.dll"
于 2018-04-10T07:24:38.780 回答
2

我在 Windows 平台上使用 PHP7 / Apache 2.4 得到了这个错误。curl_init在 CLI 中工作,但不适用于 Apache 2.4。我通过LoadFile为 libeay32.dll 和 ssleay32.dll 添加指令来解决它:

LoadFile "C:/path/to/Php7/libeay32.dll"
LoadFile "C:/path/to/Php7/ssleay32.dll"
LoadFile "C:/path/to/Php7/php7ts.dll"
LoadModule php7_module "C:/path/to/Php7/php7apache2_4.dll"
于 2016-02-08T11:12:40.667 回答
2

此答案适用于 https 请求:

Curl 没有内置的根证书(就像大多数现代浏览器一样)。您需要将其显式指向 cacert.pem 文件:

  curl_setopt($ch, CURLOPT_CAINFO, '/path/to/cert/file/cacert.pem');

没有这个,curl 无法验证通过 ssl 发回的证书。每次在 curl 中使用 SSL 时都可以使用相同的根证书文件。

您可以在此处获取 cacert.pem 文件:http: //curl.haxx.se/docs/caextract.html

参考PHP cURL 不使用 HTTPS

于 2017-02-17T08:58:44.720 回答
2

有这个问题,但在这里找到了答案: https ://askubuntu.com/questions/1116448/cannot-enable-php-curl-on-ubuntu-18-04-php-7-2

必须:

sudo a2dismod php7.0

和:

sudo a2enmod php7.2

然后:

sudo service apache2 restart

这是在系统升级到下一个版本的 Ubuntu 之后。我发现的所有其他答案都是陈旧的,因为他们中的大多数人都指出,显然 PPA 上的证书不好,但可能无论如何都不会奏效。显然,真正的问题是禁用旧版本的 php。

在这里找到解决方案:

https://askubuntu.com/questions/1116448/cannot-enable-php-curl-on-ubuntu-18-04-php-7-2

于 2019-06-26T10:11:30.397 回答
1

(试图让 Curl 在 Windows 上通过 PHP 和 Apache 工作......)

我一直收到一条错误消息:调用未定义的函数'curl_init()'

我确保在我的 php.ini 文件中使用这一行启用了 curl:extension=php_curl.dll

我确保正确设置了 extension_dir 变量,如下所示:extension_dir = "ext"

我正在做所有其他人在论坛上所说的一切,并且 curl 没有出现在我对 phpinfo() 的调用中,并且我一直从上面收到同样的错误。

最后我发现 Apache 默认在 C:\Windows 文件夹中查找 php.ini。我一直在更改我的 PHP 安装文件夹中的 php.ini。将 php.ini 复制到 C:\Windows 后,一切正常。

我花了很长时间才弄清楚这一点,所以我想我会发帖以防万一它对其他人有帮助。

于 2014-07-04T03:50:28.117 回答
1

适用于PHP 7 和 Windows x64

libeay32.dll、libssh2.dll 和 ssleay32.dll 不应在 apache/bin 中,而应仅存在于 php 目录中,并在系统环境变量中添加 php 目录。这对我有用。

Obvisouly 在 php.ini 中,您也应该启用 php_curl.dll。

于 2018-03-17T19:14:31.577 回答
1

在 Windows 上较新版本的 PHP(如 PHP 7.x)上,此处先前答案中建议的相应配置行已更改。您需要取消注释(删除行首的 ;)以下行:

extension_dir = "ext"
extension=curl

于 2020-08-18T02:02:48.493 回答
0

RusAlex 的答案是正确的,因为对于Apache,您必须安装并启用 curl 并重新启动您的 apache 服务:

sudo apt-get install php5-curl
sudo service apache2 restart

然而,在我的带有 nginx 和 php5-fpm 的 Ubuntu 服务器上,我遇到了以下问题。我不得不像这样重新启动 nginx 和 php5-fpm:

sudo service nginx restart
sudo service php5-fpm restart

但是我有非工作的 php5-fpm 进程挂着,这显然是 ubuntu 中的一个错误https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376 所以我不得不杀死所有空闲的 php5- fpm 进程能够重新启动 php5-fpm 以便实际加载 curl 模块

sudo kill <Process Id of php5-fpm Process)
于 2014-07-20T02:15:53.593 回答
0

函数 curl_int(); 导致服务器错误,安装 sudo apt-get install php5-curl restart apache2 server .. 它会像魅力一样工作

于 2016-03-12T08:21:21.923 回答
0

对于 linux,您可以通过以下方式安装它

sudo apt-get install php5-curl

对于 Windows(删除 ;)从 php.ini

;extension=php_curl.dll

重启apache服务器。

于 2019-05-13T08:31:18.847 回答
0

在 Ubuntu 18.04 上,这两个命令解决了我的这个问题。

sudo apt-get install php5.6-curl //install curl for php 5.6
sudo service apache2 restart //restart apache
于 2019-06-21T10:35:10.973 回答
0

似乎您尚未在服务器上安装 Curl。
检查服务器的 PHP 版本并运行以下命令来安装 curl。

sudo apt-get install php7.2-curl

然后使用以下命令重新启动 apache 服务。

sudo service apache2 restart

7.2替换为您的 PHP 版本

于 2019-09-16T08:39:36.740 回答
0

我也遇到过这个问题。我的操作系统是Ubuntu 18.04,我的 PHP 版本是PHP 7.2

这是我解决它的方法:

在 Ubuntu 服务器上安装 CURL:

sudo apt-get install curl

将下面的 PHP CURL 存储库添加到您的源列表中:

sudo add-apt-repository ppa:ondrej/php

刷新您的包裹数据库

sudo apt update

安装 PHP-curl 7.2

sudo apt install php7.2-fpm php7.2-gd php7.2-curl php7.2-mysql php7.2-dev php7.2-cli php7.2-common php7.2-mbstring php7.2-intl php7.2-zip php7.2-bcmath

重新启动 Apache 服务器

sudo systemctl restart apache2

就这样。

我希望这有帮助

于 2020-01-10T16:19:15.010 回答
0

另一个答案...如果您在 2020 年 10 月登陆这里,因为命令行 (CLI) 上的 PHP 已停止工作,猜猜看...一些升级会悄悄地将您转移到不同/更新版本的 PHP,无需询问!

运行: php --version您可能会惊讶地看到 CLI 正在运行的版本。

然后运行: ll /usr/bin/php你可能会惊讶地看到它链接到哪里。

在直接调用 PHP 二进制文件而不是符号链接时,最好引用您想要的特定 PHP 版本。

例子:

/usr/bin/php7.3会给你你想要的确切版本。您不能信任 /usr/bin/php 甚至只是键入 php,因为升级可能会默默地切换版本。

于 2020-10-11T16:07:17.430 回答
0

我已经在 Ubuntu 20.04.1 LTS 和 PHP 版本 7.4.3 中解决了这个问题

更新包索引:

sudo apt-get update

安装 php7.4-curl deb 包:

sudo apt-get install php7.4-curl
于 2021-01-29T13:17:23.600 回答
0

这对我有用 raspian:

sudo apt update && sudo apt upgrade
sudo apt install php-curl

最后:

sudo systemctl restart apache2

或者:

sudo systemctl restart nginx
于 2021-02-18T03:05:50.100 回答
0

要在 Ubuntu 上安装最新版本的 php-curl,请使用:

sudo apt-get install php-curl -y

于 2021-11-09T14:43:27.253 回答