无法在 Ubuntu 18.04 和 PHP 7.2 上启用 php-curl

无法在 Ubuntu 18.04 和 PHP 7.2 上启用 php-curl

因此现在,我正在尝试在 Ubuntu 18.04 上的 apache2 服务器中启用 php-curl,以允许 iframe 显示外部站点页面。我一直在使用在多个地方找到的方法来尝试此操作:

StackOverflow:如何使用 PHP 7 安装 ext-curl 扩展?

StackOverflow:在 php 7(ubuntu14.04)中安装 cURL

LinuxConfig.org:如何在 Ubuntu Linux 上使用 Apache 启用和禁用 PHP curl 模块

无论我做什么,我都无法在 php 中运行任何与 curl 相关的命令,这非常令人沮丧。我确保我已使用已sudo apt-get install curl php7.2-curl安装且没有问题,然后使用重新启动了 apache 服务sudo service apache2 restart。我尝试使用和在 php.ini 中启用扩展extension=php_curl.dll,但extension=curl没有成功。如果我尝试使用 linuxconfig.org 上提供的代码来检查 curl 模块状态,它会显示已禁用。

如果我尝试运行我的 php 代码,我会在我的日志中发现:

PHP 致命错误:未捕获错误:在 /var/www/html/inc.redirect.php:4\n 中调用未定义的函数 curl_init() 堆栈跟踪:\n#0 {main}\n 在 /var/www/html/inc.redirect.php 第 4 行抛出

我的“inc.redirect.php”文件中的代码如下:

<?php
if (isset($_GET['url'])) {
    $url = $_GET['url'];
    $ch = curl_init();
    $timeout = 10;
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}
?>

我做错什么/遗漏了什么?

更新:当我重新启动服务时,查看 apache2 error.log,看到以下内容:

PHP 警告:PHP 启动:无法加载动态库‘/usr/lib/php/20160303/curl.so’-/usr/lib/php/20160303/curl.so:无法打开共享对象文件:第 0 行未知中没有该文件或目录

仍在尝试深入研究这个问题,看来它要查找的 curl.so 文件位于 '/usr/lib/php/20170718'。我必须做什么才能更改 php 配置以查找正确的目录?

答案1

发现问题了。

发生的情况是我在 apache2 中同时启用了 php7.1 和 php7.2。必须运行sudo a2dismod php7.1,重新启动 apache,然后我才能加载我的 inc.redirect.php 页面而不会出现错误。

答案2

感谢 MathewH,我苦苦挣扎了两天,但还是没能找到错误原因,因为安装了 curl 模块,也安装了 php-curl 扩展,我可以在终端中对 URL 运行 curl,但当我curl_init()在 PHP 代码中运行该函数时,它总是显示 500 内部服务器错误,

虽然我已经通过以下命令安装了 curl 模块:

sudo apt-get install php7.0-curl
sudo /etc/init.d/apache2 restart

因为我的系统中安装了 php 7.4.6

然后我检查了 Apache2 错误日志/var/log/apache2/error_log,发现curl_init()显示错误

Call to undefined function curl_init()

然后在谷歌上搜索我找到了链接:PHP:检查 cURL 是否启用。 其中提到了这 3 个代码来检查 curl 是否已加载:

  1. if(function_exists('curl_init') === false)
    {
    
     //curl_init is not defined
        //cURL not enabled
    
    }
    
  2. //Check if "curl" can be found in the array of loaded extensions.
    
    if(in_array('curl', get_loaded_extensions()))
    {
        //cURL module has been loaded
    } 
    else
    {
        //It has not been loaded. Use a fallback.
    }
    
  3. if(extension_loaded('curl'))
    {
        //the extension has been loaded
    }
    

我在index.php中添加了这3段代码,并将项目文件夹命名为curl-load-check。运行后发现并确认curl扩展未加载。

然后我终于找到了这个链接: 无法在 Ubuntu 18.04 和 PHP 7.2 上启用 php-curl 从 MathewH 的回答中,我发现 apache2 中都启用了 php 7.2 和 php 7.4。因此我通过以下命令禁用了 php 7.2:

sudo a2dismod php7.2
sudo systemctl restart apache2 

最后我检查了 php 代码,检查 curl 扩展是否已加载,如上文 php 代码中所述,它最终显示 curl 扩展已成功加载。我现在检查了curl_init()php 代码中使用的函数现在正在运行,没有任何错误。谢谢 MathewH,经过一番努力,你终于拯救了我

相关内容