问题描述
我刚刚将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