我刚刚在我的Ubuntu上安装了php7.起初,没有问题,我的网站正在运作.但突然间,它开始返回调用未定义函数curl_init()错误.现在,我的页面包含卷曲代码不起作用.
在phpinfo()中,它看起来已启用Curl.有类似的问题,但没有一个在php7中处理它.我认为它应该是与其他人不同的东西.
编辑:当我尝试
php -i | grep curl
Run Code Online (Sandbox Code Playgroud)
在终端,它返回
/etc/php/7.0/cli/conf.d/20-curl.ini,
curl
Run Code Online (Sandbox Code Playgroud)
Deu*_*777 87
升级到XX(16.04)后,我遇到了类似卷曲的问题.重新安装卷曲后:
sudo apt-get install php-curl
Run Code Online (Sandbox Code Playgroud)
并重启服务器
sudo service apache2 restart
Run Code Online (Sandbox Code Playgroud)
一切都恢复正常:)
ult*_*ohn 18
假设
您已经为正在使用的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"
Run Code Online (Sandbox Code Playgroud)
在我的例子中,我的Apache的ROOT配置目录显示在
HTTPD_ROOT="/etc/apache2"
Run Code Online (Sandbox Code Playgroud)
现在我知道了Apache正在使用的配置的位置,现在我可以通过检查"mods-enabled"目录中的目录来准确地确定它正在使用的PHP的版本"/etc/apache2".
在我的情况下,当ls在内部执行一段时间时"mods-enabled",它显示了ff输出:
access_compat.load authz_user.load filter.load php5.load
...
authz_host.load env.load php5.conf
Run Code Online (Sandbox Code Playgroud)
此时,我现在肯定知道Apache正在使用'php5'我系统上安装的PHP版本,无论它是什么.
然后我尝试'php5'通过运行以下命令使用此版本的PHP重现上述错误(即):
$ php5 -r "curl_init();"
PHP Fatal error: Call to undefined function curl_init() in Command line code on line 1
Run Code Online (Sandbox Code Playgroud)
瞧!
我期望我的Apache使用的PHP版本是"php5.6"和上面运行相同的命令,这个版本没有产生上述错误.
如何告诉Apache使用哪个版本的PhP?
您可以使用a2enmod/a2dismodApache2 的cli命令完成此操作.
首先,我禁用我服务器上当前活动的PHP模块(即"php5"):
a2dismod php5
Run Code Online (Sandbox Code Playgroud)
然后我为php模块启用了我希望我的Apache使用的PHP版本:
a2enmod php5.6
Run Code Online (Sandbox Code Playgroud)
然后我重启Apache
service apache2 restart
Run Code Online (Sandbox Code Playgroud)
在我刷新网站上的违规页面后,错误现在消失了.
小智 5
我做了以上所有操作,但没有解决问题。
环境: Ubuntu,php7.1,Laravel 5.6
解
sudo add-apt-repository ppa:ondrej/php
sudo apt-get install php7.1-curl
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
68244 次 |
| 最近记录: |