【问题标题】:PHP Fatal error: Call to undefined function curl_init()PHP 致命错误:调用未定义的函数 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

标签: php lampp


【解决方案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】:

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

      1. php.ini 文件中,取消注释此行:extension=php_curl.dll
      2. php.ini 文件中,取消注释此行:extension_dir = "ext"
      3. 我重新启动了 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

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

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

        1. curl_init() 调用出现致命错误
        2. 在php_info中会看到curl模块作者(说明curl已安装且可用)
        3. 同样在 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

                                    【讨论】:

                                      猜你喜欢
                                      • 2015-06-11
                                      • 1970-01-01
                                      • 2021-09-21
                                      • 1970-01-01
                                      • 2020-08-02
                                      • 2018-03-31
                                      相关资源
                                      最近更新 更多