PHP 致命错误: 调用未定义函数 curl_init()

我尝试了 在 POST 请求中的 PHP 发送请求,认为它可能对我有用。我的代码如下:

$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 1815:24:532010][ error ][ client: : 1] PHP Fatal error: 在第5行/var/www/testing1/index.PHP 中调用未定义的函数 curl _ init ()

我想做的是有一个发送邮寄请求的预订表单。然后我想处理文章的价值,并再次发送文章请求到贝宝。

132204 次浏览

您需要为 php 安装 CURL 支持。

在 Ubuntu 中,你可以通过

sudo apt-get install php5-curl

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

sudo /etc/init.d/apache2 restart

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

PHP CURL 文档中有一个安装手册。

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

;extension=php_curl.dll

重启 Apache 服务器。

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

我总是出错说: 调用未定义函数‘ curl _ init ()’

我确保在 php.ini 文件中启用了 curl: 扩展名 = php _ curl. dll

我确保了扩展名 _ dir 变量的设置是正确的,如下所示: Extension _ dir = “ ext”

我正在做其他人在论坛上说的所有事情,curl 没有出现在我打给 phpinfo ()的电话中,我不断地从上面得到同样的错误。

最后我发现 Apache 默认在 C: Windows 文件夹中查找 php.ini。我一直在更改 PHP 安装文件夹中的 PHP.ini。一旦我把 php.ini 复制到 C: Windows 中,所有东西都工作了。

我花了很长时间才想明白,所以我想我应该发个帖子,以防对别人有帮助。

RusAlex 的回答是正确的,对于 阿帕奇人,你必须安装并启用 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中的一个 bug 因此,我必须杀死所有空闲的 php5-fpm 进程,以便能够重新启动 php5-fpm,从而实际加载 curl 模块

sudo kill <Process Id of php5-fpm Process)

为了修复这个 bug,我做到了:

  1. php.ini文件中,取消注释这一行: extension=php_curl.dll
  2. php.ini文件中,取消注释这一行: extension_dir = "ext"
  3. 在使用内置服务器时,我重新启动了 NETBEANS

在 Xubuntu,我不得不安装 libcurl3 libcurl3-dev 库:

sudo apt-get install curl libcurl3 libcurl3-dev php5-curl

对于 Ubuntu: 如果需要,将 extension=php_curl.so添加到 php.ini 以启用

这是自动处理的 一般来说,但在某些情况下——例如,在共享开发环境中——需要手动重新启用 可以

指纹符合以上三种情况:

  1. Curl _ init ()调用的致命错误
  2. 在 php _ info 中,您将看到 curl 模块的作者(指示 curl 已安装并可用)
  3. 同样在 php _ info 中,您将看不到 curl 配置块(表示未加载 curl)

我在 Windows 平台上使用 PHP7/Apache 2.4时出现了这个错误。curl_init可以在 CLI 中工作,但不能在 Apache 2.4中工作。我通过添加 libeay32.dll 和 ssleay32.dll 的 LoadFile指令解决了这个问题:

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"

函数 curl _ int () ; 导致服务器错误,安装 sudo apt-get install php5-curl 重新启动 apache2服务器. . 它会像魅力一样工作

以下是 https 请求的回答:

Curl 没有内置的根证书(像大多数现代浏览器一样)。您需要显式地将其指向一个 ccert.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

参考资料 与 HTTPS 不兼容

对于系统中安装了多个版本的 PHP,并且您确信已经安装了 php-curl包,但是 Apache 仍然给出了相同的错误,我只是添加了我的答案。

Curl _ init ()未定义,即使在 Php 7中启用了 Php-curl。

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

Sudo apt-get install php7.0-curl

Sudo 服务 apache2重新启动

我从这里的链接检查获得了更多的细节

对于 PHP7和 Windowsx64

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

显然,在 php.ini 中也应该启用 php _ curl.dll。

第一步:

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

(删除行尾的 ;)

第二步 :

将其添加到 Apache/conf/httpd.conf(libeay32.dll,ssleay32.dll,libssh2.dll find 直接位于 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"

对于 linux,你可以通过

sudo apt-get install php5-curl

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

;extension=php_curl.dll

重启 Apache 服务器。

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

sudo apt-get install php5.6-curl //install curl for php 5.6
sudo service apache2 restart //restart apache

有这个问题,但在这里找到了答案: 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

看来你还没在服务器上安装 Curl。
检查服务器的 PHP 版本并运行以下命令来安装 curl。

sudo apt-get install php7.2-curl

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

sudo service apache2 restart

你的 PHP 版本代替 7.2

我也面临这个问题。我的操作系统是 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

仅此而已。

希望这个能帮上忙

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

extension_dir = "ext"
extension=curl

还有一个答案。 如果您在2020年10月因为命令行(CLI)上的 PHP 停止工作而降落在这里,猜猜怎么着... 一些升级将悄悄地将您转移到 PHP 的不同/更新版本,而不需要询问!

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

然后跑: ll /usr/bin/php,您可能会惊讶地看到这是链接到哪里。

当直接调用 PHP 二进制文件而不是符号链接时,最好引用所需的 SPECIFIC 版本的 PHP。

例如:

/usr/bin/php7.3会给你你想要的精确版本。您不能信任/usr/bin/php,甚至不能仅仅输入 php,因为升级可能会悄无声息地切换您的版本。

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

更新软件包索引:

sudo apt-get update

安装 php7.4-curl deb 包:

sudo apt-get install php7.4-curl

这招对我和 Raspian 很管用:

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

最后:

sudo systemctl restart apache2

或:

sudo systemctl restart nginx

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

sudo apt-get install php-curl -y