繁体   English   中英

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

[英]Call to undefined function curl_init() even it is enabled in php7

我刚刚在我的 Ubuntu 上安装了 php7。 起初,没有问题,我的网站正在运行。 但是突然,它开始返回 Call to undefined function curl_init() 错误。 现在,我的页面包含 curl 代码不起作用。

在 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 版本安装了模块的版本,但问题并没有消失。

这里发生了什么?

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

您如何知道 Apache 使用的是哪个版本的 PHP?

要知道这一点,关键思想是了解 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 正在使用我的系统上安装的'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

然后我为我希望我的 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

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

sudo add-apt-repository ppa:ondrej/php

您的文件路径可能不正确

检查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 install php7.0-curl

您的页面可能不是使用 CLI SAPI 生成的。 检查从您的网络服务器运行时 phpinfo() 返回的内容(它可能试图读取错误的 ini 文件)。

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

这个对我有用。

我为此抓了一阵子,curl 模块已加载,但仍然出现错误。
这是在我从 Debian Stretch 升级到 Buster 之后发生的。

原因是安装并使用了 php7.3-curl,但 apache 运行 php7.0,即使安装了 7.3。 所以我删除了 php7.0 并重新安装了 libapache2 以使其正常工作

apt-get remove php-7.0
apt-get remove libapache2-mod-php7.3
apt-get install libapache2-mod-php7.3
  • 第 1 步:下载 PHP 7,
  • 第 2 步:复制 libeay32.dll 和 ssleay32.dll 并将它们粘贴到 C:\\Windows\\System32 中。
  • 第 3 步:将 C:\\php\\ext 中的 php_openssl.dll 和 php_curl.dll 替换为最新的 dll。 重启阿帕奇

这解决了我的问题,希望有人也受益

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM