【问题标题】:Fatal error: Call to undefined function curl_init()致命错误:调用未定义的函数 curl_init()
【发布时间】:2010-12-09 09:44:37
【问题描述】:
<?php
$filename = "xx.gif";
$handle = fopen($filename, "r");
$data = fread($handle, filesize($filename));

// $data is file data
$pvars   = array('image' => base64_encode($data), 'key' => IMGUR_API_KEY);
$timeout = 30;
$curl    = curl_init();

curl_setopt($curl, CURLOPT_URL, 'http://api.imgur.com/2/upload.xml');
curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $pvars);

$xml = curl_exec($curl);

curl_close ($curl);

var_dump($xml);
?>

我正在使用 Imgur API,但它似乎不起作用。 PHP.net 说curl_init() 在 PHP5 中,但我的主机说不是。我怎样才能做到这一点?

【问题讨论】:

    标签: php linux ubuntu curl debian


    【解决方案1】:

    在旧版本的 Debian 和 Ubuntu 上,您通过安装 PHP 的 Curl 扩展并重新启动网络服务器解决了这个问题。假设网络服务器是 Apache 2:

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

    在较新的版本中,包名称已更改:

    sudo apt install php-curl
    

    您可能需要安装更多:

    sudo apt-get install curl libcurl3 libcurl3-dev;
    

    【讨论】:

    • 我必须在 ubuntu 中安装更多:“sudo apt-get install curl libcurl3 libcurl3-dev php5-curl; 你会知道它是否有效,因为 phpinfo() 将获得一个带有 Curl 信息的新部分。”
    • 我希望 sudo service apache2 restart 也能正常工作?
    • 假设重启 = 停止 + 启动是合乎逻辑的,但根据多年的 Apache 经验,情况并非总是如此。我学会了使用明确的停止,然后开始变得安全。抱歉,我不记得具体的潜在问题,但欢迎您使用restart 看看它是否适合您。
    • 只用 sudo apt-get install php5-curl 为我做了诀窍 .. 谢谢!
    • sudo service apache2 restart 只是重新启动 Apache。为了让 Aache/PHP 获取添加的 CURL 包,有必要运行此 [在 CURL 安装之后],因此它们将在下一次运行 CURL 注入的 PHP 脚本时工作。但是,我还发现我需要包含 php5-curl 才能获得满意 ;)
    【解决方案2】:

    curl是需要安装的扩展,与PHP版本无关。

    http://www.php.net/manual/en/curl.setup.php

    【讨论】:

    • +1 如果您无法安装 curl 扩展,您可以尝试将 shell_exec(或类似的)与 curl 命令一起使用。或者您可以使用 fsockopen 来“伪造”它。
    • 该页面没有说明如何安装扩展。有更好的资源吗?
    • 安装 curl 包后,查看 php.ini 文件(在 /etc 中)。搜索卷曲。在我的(OpenBSD)中,我不得不删除 extension=curl 行上的注释
    【解决方案3】:

    还没有足够的声望来发表评论。使用 Ubuntu 和一个简单的:

    sudo apt-get install php5-curl
    sudo /etc/init.d/apache2 restart
    

    不适合我。

    由于某种原因,curl.so 安装在默认情况下未拾取的位置。我检查了我的 php.ini 中的extension_dir 并将curl.so 复制到我的extension_dir

    cp /usr/lib/php5/20090626/curl.so  /usr/local/lib/php/extensions/no-debug-non-zts-20090626
    

    希望这对某人有所帮助,请相应地调整您的路径位置。

    【讨论】:

      【解决方案4】:

      对于 Ubuntu

      为 PHP 安装 Curl 扩展并重新启动 apache 服务器。

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

      适用于 Windows

      问题是因为没有将 lib_curl.dll 包含到 PHP 中。 如果不工作,还加载以下扩展名,所以php.ini 中的那些扩展名或删除评论如果已经存在于php.ini 文件中然后删除评论。

      extension=php_bz2.dll
      extension=php_curl.dll
      extension=php_dba.dll
      

      现在重新启动 apache 服务器。 如果您收到错误“无法加载 php_curl.dll”, 将 SSLEAY32.PHP、libEAY32.dll (OpenSSL) 库复制到 System32 文件夹。

      【讨论】:

      • 这个问题被标记为关于 Ubuntu 和 Debian Linux。您的回答不适用于这些环境。
      • @MarkStosberg 同意。更新了答案。
      • 根本不工作。我不知道这个命令有什么问题,但不起作用。我正在使用 Ubuntu 16.04
      • 是的!这应该是公认的答案!至少对于 linux 而言。
      【解决方案5】:

      对于 ubuntu 上的 php 7.0 使用

      sudo apt-get install php7.0-curl
      

      最后,

      sudo service apache2 restart 
      

      sudo service nginx restart
      

      【讨论】:

      • 找到你的版本:$php --version version =7.X 然后安装:$ sudo apt-get install php7.X-curl
      【解决方案6】:

      这样做

      sudo apt-get install php-curl
      

      然后重启服务器

      sudo service apache2 restart
      

      【讨论】:

      • 谢谢伙计.. 正在参加比赛,我不习惯 php,curl。你的回答帮我解决了一个问题,花了我半天时间。
      【解决方案7】:

      在运行 PHP 7.1.14 的 ubuntu 16.04 上体验过这个。要解决,首先将其放入脚本并执行。如果安装并启用 curl 则返回 true,否则返回 false。

      <?php
          var_dump(extension_loaded('curl'));
      ?>
      

      如果返回 false,则运行

      sudo apt-get install php7.1-curl
      

      最后,

      sudo service apache2 restart
      

      重新启动后,脚本将返回 true,希望您的错误应该得到解决。

      【讨论】:

        【解决方案8】:

        有适用于 Windows 7 x64 的所有必要细节的解决方案:

        http://www.youtube.com/watch?v=7qNTi1sEfE8

        虽然是法语,但你什么都能听懂!我解决了同样的问题,即使不会说法语。 :-)

        许多答案忘记提到您需要从这个位置添加新版本的 php_curl.dll 文件:http://www.anindya.com/php-5-4-3-and-php-5-3-13-x64-64-bit-for-windows/

        我将新版本的 php_curl.dll 从存档 php_curl-5.4.3-VC9-x64.zip 添加到文件夹:C:\wamp\bin\php\php5.4.3\ext 和 C:\Windows\System32 以及所有内容很好!

        【讨论】:

          【解决方案9】:

          这是来自官方网站。 php.net

          安装 PHP 之后。

          窗口

          移动到 Windows\system32 文件夹: libssh2.dll、php_curl.dll、ssleay32.dll、libeay32.dll

          Linux

          移动到 Apache24\bin 文件夹 libssh2.dll

          然后在 php.ini 中取消注释 extension=php_curl.dll

          【讨论】:

            【解决方案10】:
            $ch = curl_init('http://api.imgur.com/2/upload.xml'); //initialising our url
            
            curl_setopt($ch, CURLOPT_MUTE, 1);
            
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);  //used for https headers 
            
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);  //used for https headers
            
            curl_setopt($ch, CURLOPT_POST, 1);
            
            curl_setopt($ch, CURLOPT_POSTFIELDS, urlencode($pvars));  
            //the value we post
            
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //waiting for reponse, default value in php is zero ie, curls normally do not wait for a response
            
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0'); 
            
            $output = curl_exec($ch); //the real execution 
            curl_close($ch);
            
            echo $output;
            

            试试这个代码。我不确定。但我用它来将 xml 数据发送到远程 url。

            【讨论】:

            • 这不是问题的答案。
            猜你喜欢
            • 2011-05-27
            • 2021-09-21
            • 1970-01-01
            • 2015-06-11
            • 2018-03-31
            • 2012-09-17
            相关资源
            最近更新 更多