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

Posted

技术标签:

【中文标题】PHP 致命错误:调用未定义的函数 curl_init()【英文标题】:PHP Fatal error: Call to undefined function curl_init() 【发布时间】:2011-05-27 12:37:16 【问题描述】:

我尝试php Post Request inside a 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

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

【问题讨论】:

好像没有启用 curl 库 是的,我在我的 phpinfo 中找不到 curl 我在我的 php.ini 文件中也找不到 curl 【参考方案1】:

你需要为 php 安装 CURL 支持。

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

sudo apt-get install php5-curl

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

sudo /etc/init.d/apache2 restart

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

PHP CURL documentation有安装手册。

【讨论】:

user@explorerx:~$ sudo apt-get install php5_curl 读取包列表...完成 构建依赖树 读取状态信息...完成 E: 找不到包 php5_curl 我觉得你是对的,但它是 php5-curl。我正在做让我们看看 php-curl,不是 php_curl - 破折号,没有下划线。 我还需要在安装和重新启动 apache 之间执行sudo php5enmod curl。可能是由于最近 Debian 包装的变化。 在 ubuntu 16.04 $ sudo apt-get install -y php5.6-curl【参考方案2】:

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

;extension=php_curl.dll

重启apache服务器。

【讨论】:

对于 XAMPP 用户,这个 php.ini 位于您的 /xampp/apache/php/ 中。旧版本位于 /xampp/apache/bin/。 对于 Ubuntu 用户,the php.ini file locations are listed here。请注意,Apache 和 CLI(命令行)有 2 个 php.ini 文件 在当前版本的 PHP for Windows 上,它现在实际上是“extension=curl”而不是“extension=php_curl.dll”【参考方案3】:

(试图让 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 后,一切正常。

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

【讨论】:

【参考方案4】:

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

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

在我的 Ubuntu Server with nginx 和 php5-fpm 上,我遇到了以下问题。我不得不像这样重新启动 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)

【讨论】:

【参考方案5】:

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

    php.ini 文件中,取消注释此行:extension=php_curl.dllphp.ini 文件中,取消注释此行:extension_dir = "ext" 我重新启动了 NETBEANS,因为我使用的是内置服务器

【讨论】:

第 2 点是为我解决的问题。谢谢!!【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

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

指纹将符合以下所有三个条件:

    curl_init() 调用出现致命错误 在php_info中会看到curl模块作者(说明curl已安装且可用) 同样在 php_info 中,您会看到没有 curl 配置块(表明 curl 未加载)

【讨论】:

【参考方案8】:

我在 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"

【讨论】:

【参考方案9】:

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

【讨论】:

【参考方案10】:

此答案适用于 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 Not Working with HTTPS

【讨论】:

【参考方案11】:

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

curl_init() undefined even if php-curl is enabled in Php 7.

【讨论】:

【参考方案12】:

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

sudo apt-get install php7.0-curl

sudo service apache2 重启

i got it from this link check here for more details

【讨论】:

【参考方案13】:

适用于 PHP 7 和 Windows x64

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

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

【讨论】:

"在系统环境变量中添加php目录" - 哪个环境变量?【参考方案14】:

第 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"

【讨论】:

对我来说,只需添加“.../libssh2.dll”行即可。 Windows 10 上的 PHP 版本 7.2.4。谢谢。【参考方案15】:

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

sudo apt-get install php5-curl

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

;extension=php_curl.dll

重启apache服务器。

【讨论】:

【参考方案16】:

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

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

【讨论】:

【参考方案17】:

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

【讨论】:

首先我必须安装 libapache2-mod-php7.3 然后按照这些有用的步骤使用正确的版本。【参考方案18】:

您的服务器上似乎还没有安装 Curl。 检查服务器的 PHP 版本并运行以下命令安装 curl。

sudo apt-get install php7.2-curl

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

sudo service apache2 restart

7.2 替换为 您的 PHP 版本

【讨论】:

【参考方案19】:

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

就是这样。

我希望这会有所帮助

【讨论】:

【参考方案20】:

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

extension_dir = "ext"extension=curl

【讨论】:

【参考方案21】:

又一个答案... 如果您在 2020 年 10 月登陆这里,因为命令行 (CLI) 上的 PHP 已停止工作,您猜怎么着……一些升级将让您无声无息地转移到不同/更新版本的 PHP!

运行: php --version,您可能会惊讶地看到 CLI 运行的是哪个版本。

然后运行: ll /usr/bin/php,您可能会惊讶地看到它链接到的位置。

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

例子:

/usr/bin/php7.3 将为您提供所需的确切版本。您不能信任 /usr/bin/php 甚至只是输入 php,因为升级可能会默默地切换版本。

【讨论】:

【参考方案22】:

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

更新包索引:

sudo apt-get update

安装php7.4-curl deb包:

sudo apt-get install php7.4-curl

【讨论】:

【参考方案23】:

这对我有用 raspian:

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

终于:

sudo systemctl restart apache2

或:

sudo systemctl restart nginx

【讨论】:

【参考方案24】:

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

sudo apt-get install php-curl -y

【讨论】:

以上是关于PHP 致命错误:调用未定义的函数 curl_init()的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:调用未定义的函数 imagewebp() [关闭]

致命错误:在 PHP 中调用未定义的函数 imap_open()

PHP 致命错误:调用 Cpanel 上未定义的函数 json_decode()

PHP 致命错误:未捕获的错误:使用 Laravel 5.8 和 PHP 7.4 调用未定义函数 Whoops\Exception\xdebug_is_enabled()

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

php:致命错误:调用未定义函数 sqlsrv_connect()