调用未定义的函数 curl_init() 即使它在 php7 中处于启用状态

2022-08-30 10:57:51

我刚刚在我的Ubuntu上安装了php7。起初,没有问题,我的网站正在运行。但突然间,它开始返回调用未定义的函数curl_init()错误。现在,我的页面包含卷曲代码不起作用。

在phpinfo()中,看起来Curl已启用。有类似的问题,但没有一个在php7中处理它。我认为它应该与其他产品不同。

编辑:当我尝试

php -i | grep curl       

在终端中,它返回

/etc/php/7.0/cli/conf.d/20-curl.ini,
curl

答案 1

升级到XX(16.04)后,我遇到了类似的 curl 问题。重新安装卷曲后:

sudo apt-get install php-curl

和服务器重新启动

sudo service apache2 restart

一切都恢复了正常:)


答案 2

假设

您已经为正在使用的PHP版本安装了模块版本,但问题并没有消失。

这是怎么回事?

您的系统上可能安装了多个版本的PHP,而Apache没有使用您期望它使用的版本。

你怎么知道哪个版本的PHP Apache正在使用?

要知道这一点,关键思想是学习Apache配置文件的ROOT目录。在命令行中,您可以键入:

apache2ctl -V  //sample output below

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Server version: Apache/2.4.7 (Ubuntu)
Server built:   Jul 15 2016 15:34:04
Server's Module Magic Number: 20120211:27
Server loaded:  APR 1.5.1-dev, APR-UTIL 1.5.3
Compiled using: APR 1.5.1-dev, APR-UTIL 1.5.3
Architecture:   64-bit
Server MPM:     prefork
  threaded:     no
    forked:     yes (variable process count)
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/etc/apache2"
 -D SUEXEC_BIN="/usr/lib/apache2/suexec"
 -D DEFAULT_PIDLOG="/var/run/apache2.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error_log"
 -D AP_TYPES_CONFIG_FILE="mime.types"
 -D SERVER_CONFIG_FILE="apache2.conf"

在我的情况下,我的Apache的ROOT配置目录显示在

HTTPD_ROOT="/etc/apache2"

现在我知道了Apache正在使用的配置的位置,现在我可以通过检查位于目录内的目录来准确地确定它正在使用的PHP版本。"mods-enabled""/etc/apache2"

在我的情况下,当在 里面做一段时间时,它显示ff输出:ls"mods-enabled"

access_compat.load  authz_user.load  filter.load       php5.load
...
authz_host.load     env.load         php5.conf

在这一点上,我现在可以肯定地知道Apache正在使用我系统上安装的PHP版本,无论那是什么。'php5'

然后,我尝试通过运行以下命令使用此版本的PHP(即)重现上述错误:'php5'

$ php5 -r "curl_init();"
PHP Fatal error:  Call to undefined function curl_init() in Command line code on line 1

瞧!

我期望我的Apache使用的PHP版本是并且运行与此版本相同的命令不会产生上述错误。"php5.6"

溶液

要解决此问题,您可以安装与Apache正在使用的PHP版本相对应的模块版本(在我的示例php5.0-curl中),或者您可以将Apache中使用的PHP版本更改为所需的版本。

如何告诉 Apache 要使用哪个版本的 PHP?

您可以使用Apache2的cli命令来完成此操作。a2enmod/a2dismod

首先,我禁用了服务器上当前处于活动状态的PHP模块(即:"php5"

a2dismod php5

然后,我为我希望Apache使用的PHP版本启用了php模块:

a2enmod php5.6

然后我重新启动Apache

service apache2 restart

在我刷新了网站上的违规页面后,错误现在已经消失了。


推荐