我刚刚在我的Ubuntu上安装了php7。 起初,没有问题,我的网站正在运作。 但突然间,它开始返回调用未定义函数curl_init()错误。 现在,我的页面包含卷曲代码不起作用。
在phpinfo()中,它看起来已启用Curl。 有类似的问题,但没有一个在php7中处理它。 我认为它应该是与其他人不同的东西。
编辑: 当我尝试
php -i | grep curl
在终端,它返回
/etc/php/7.0/cli/conf.d/20-curl.ini,
curl
答案 0 :(得分:80)
升级到XX(16.04)后,我的卷曲问题也有类似问题。 重新安装curl后:
sudo apt-get install php-curl
服务器重启
sudo service apache2 restart
一切都恢复正常:)
答案 1 :(得分:15)
<强>假设强>
您已经为您正在使用的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正在使用的配置的位置,现在我可以通过检查"mods-enabled"
目录中的"/etc/apache2"
目录来准确地确定它正在使用的PHP版本。
就我而言,在ls
内进行"mods-enabled"
时,会显示ff输出:
access_compat.load authz_user.load filter.load php5.load
...
authz_host.load env.load php5.conf
此时,我现在肯定知道Apache正在使用我系统上安装的'php5'
版本的PHP,无论它是什么。
然后我尝试使用此版本的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的a2enmod/a2dismod
cli命令完成此操作。
首先,我禁用我服务器上当前处于活动状态的PHP模块(即"php5"
):
a2dismod php5
然后我启用php模块以获取我希望我的Apache使用的PHP版本:
a2enmod php5.6
然后我重启Apache
service apache2 restart
在我刷新网站上的违规页面后,错误现在消失了。
答案 2 :(得分:3)
您的文件路径可能不正确
检查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
答案 3 :(得分:3)
对我来说,解决方法是使用以下命令更新apt-get,然后安装php7.0-curl。
sudo add-apt-repository ppa:ondrej/php
答案 4 :(得分:2)
我完成了上述所有操作,但没有解决问题。
环境: Ubuntu,php7.1,Laravel 5.6
解决方案
sudo add-apt-repository ppa:ondrej/php
sudo apt-get install php7.1-curl
答案 5 :(得分:1)
您的页面可能不是使用CLI SAPI生成的。检查从网络服务器运行时phpinfo()返回的内容(它可能尝试读取错误的ini文件)。
答案 6 :(得分:1)
我知道它的答案很晚,但是我认为它很有用,因为我遇到了同样的问题,并尝试了上述所有解决方案,但没有用。 然后我按以下命令,现在可以正常工作了:
apt-get install php7.0-curl
答案 7 :(得分:0)
这解决了我的问题,希望有人受益
答案 8 :(得分:0)
ubuntu 18.04 php 7.4
如果您具有PHP的旧版本和新版本。您需要禁用旧的卷曲模式,这样。 遵循步骤。
sudo a2dismod php7.1 (your old version)
sudo a2endmod php7.4 (your new version)
sudo service apache2 restart
sudo systemctl restart apache2
对我有用。
答案 9 :(得分:0)
在这上面抓了一段时间,虽然curl模块已加载,但仍然出现错误。
当我从Debian Stretch升级到Buster之后,就会发生这种情况。
原因是安装并使用了php7.3-curl,但是即使安装了7.3,apache仍运行php7.0。 所以我删除了php7.0并重新安装了libapache2以使其正常工作
apt-get remove php-7.0
apt-get remove libapache2-mod-php7.3
apt-get install libapache2-mod-php7.3