我在安装了PHP 7的Ubuntu 16上安装了cURL,但仍然出现“Call to undefined function curl_init()”错误。

5

我已经执行了sudo apt-get install curl,sudo apt-get php5-curl,sudo apt-get php-curl,但是我得到了curl_init()函数未定义的错误。

有人知道这个问题的解决方案吗?

以下是我的PHP代码。

<?php 
    // create curl resource 
    $ch = curl_init(); 

    // set url 
    curl_setopt($ch, CURLOPT_URL, "example.com"); 

    //return the transfer as a string 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    // $output contains the output string 
    $output = curl_exec($ch); 

    // close curl resource to free up system resources 
    curl_close($ch);      
?>

尝试运行命令 php -i | grep curl 查看是否有输出,或运行命令 php -m 看看是否有 curl。 - Ekin
执行 php -i | grep curl 命令后,我得到了以下输出:/etc/php/7.0/cli/conf.d/20-curl.ini, curl。 - AceJordan
这个错误在PHP5上不存在。 - AceJordan
这是 php -m 的结果: [PHP 模块] 日历 核心 字符类型 cURL 日期 DOM Exif 文件信息 过滤器 FTP GD gettext 哈希 字符编码转换 JSON libxml 多字节字符串 mcrypt MySQLi MySQLnd OpenSSL 进程控制 正则表达式 PDO pdo_mysql Phar POSIX 读取行 反射 会话 共享内存 SimpleXML 套接字 SPL 标准库 System V 消息队列 System V 信号量 System V 共享内存 分词器 WDDX Xdebug XML XMLReader XMLWriter XSL Zend OPcache 压缩库 - AceJordan
你是否重启了apache(如果你使用的是apache2)?之后可以使用sudo /etc/init.d/apache2 restart或者service apache2 restart命令。看起来你已经安装了它,只是没有启用。 :) - Ekin
显示剩余3条评论
4个回答

5

检查Apache使用的PHP版本,可以使用phpinfo();函数。

检查很重要,因为你可能由于某种原因切换到了较低的版本(就像我的情况一样)。

现在从命令行运行此命令来安装curl:

*(Don\'t copy this) sudo apt-get install php[version of php]-curl* 

例如,如果是5.6,那么使用:
sudo apt-get install php5.6-curl 

接下来,不要忘记重新启动apache2

sudo service apache2 restart

我曾经遇到过安装了php7 curl的同样问题。但是当我检查时,我发现启用的php版本是5.6。因此,这是为那些可能遇到相同问题的人准备的。 - Confused

4

如果你的Ubuntu 16.04运行php7.0,你应该像这样指定版本:

sudo apt-get install php7.0-curl

然后,按照惯例,重新启动Apache:

sudo service apache2 reload


3
尝试执行以下命令:phpenmod curl,然后重新启动 Apache。希望这能有所帮助(;

我尝试了这个,结果是“在/etc/php/5.6/mods-available下找不到curl ini文件模块。”,我猜测它正在错误的目录中获取curl,因为我正在使用PHP 7。 - AceJordan
1
尝试像@Ekn的评论那样启用php7模块,并在phpenmod命令中指定php版本,比如:phpenmod -v 7.0 curl - trank

2
对于任何安装php扩展并仍然出现“undefined”问题的人:
1. 运行 “php -i | grep EXT_NAME” 命令,查看是否匹配到任何在你的 phpinfo() 中有“EXT_NAME”(在上面的例子中为“curl”)的内容,或者简单地创建一个测试文件 并查看你是否能发现该扩展。
2. 运行 “php -m” 命令,查看已加载的扩展,并检查是否有另一个安装程序通过 “php -v” 或使用 “find -name 'php.ini'” 或在根目录中使用 “locate php.ini” 占据了优先权。
3. 不要忘记重新启动 apache(或任何其他类似服务)和/或启用已安装的模块。
4. 对于 apache,可以通过运行 “service apache2 restart” 命令来完成。
如果您正在从源代码构建,则另一个可能的原因是在安装扩展后忘记使用 --with-curl[=DIR] 重新编译 PHP(在这种情况下为 curl)。

1
@AceJordan,您可能需要通过以下方式禁用mod php5并启用php7:a2dismod php5,然后a2enmod php7.0,最后service apache2 restart - Ekin
当然,这需要您首先安装libapache2-mod-php7.0 - Ekin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接