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.dll
在php.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()