ubuntu php7开启curl,调用未定义的函数 curl_init(),即使已在php7中启用

问题描述

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

In phpinfo(),它似乎启用了 curl 。有类似的问题,但没有人在php7中处理过。我认为这应该与其他人有所不同。

编辑:当我尝试

php -i | grep curl

在终端,它返回

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

curl

最佳办法

升级到XX(16.04)后,我也遇到了 curl 问题。重新安装curl后:

sudo apt-get install php-curl

和服务器重启

sudo service apache2 restart

一切恢复正常:)

次佳办法

假设条件

您已经为所使用的PHP版本安装了该模块的版本,但是问题并没有消除。

What is going on here?

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

How do you know which version of PHP Apache is using?

要知道这一点,关键思想是学习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使用的配置的位置,现在可以通过检查位于"/etc/apache2"目录内的"mods-enabled"目录来准确确定其使用的PHP版本。

就我而言,当在"mods-enabled"内部执行ls时,显示ff输出:

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版本更改为该版本。你要。

How do I tell Apache which version of PHP to use?

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

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

a2dismod php5

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

a2enmod php5.6

然后我重新启动Apache

service apache2 restart

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

第三种办法

我做了以上所有操作,但没有解决问题。

环境:Ubuntu,php7.1,Laravel 5.6

sudo add-apt-repository ppa:ondrej/php

sudo apt-get install php7.1-curl

第四种办法

您的文件路径可能不正确

检查Apache错误登录

/var/log/apache2/error.log

如果所调用的路径或文件名确实与您的真实路径匹配,例如

/usr/lib/php/20151012/php_curl.so

就我而言,这是相同的路径,但是缺少“ php_”

/usr/lib/php/20151012/curl.so

所以我相应地更改了路径/文件名

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

extension=php_curl.so

进入

extension=curl.so

第五种办法

对我来说,解决方法是使用以下命令更新apt-get,然后安装php7.0-curl。

sudo add-apt-repository ppa:ondrej/php

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值