![无法在 Ubuntu 18.04 和 PHP 7.2 上启用 php-curl](https://linux22.com/image/1065858/%E6%97%A0%E6%B3%95%E5%9C%A8%20Ubuntu%2018.04%20%E5%92%8C%20PHP%207.2%20%E4%B8%8A%E5%90%AF%E7%94%A8%20php-curl.png)
因此现在,我正在尝试在 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 是否已加载:
if(function_exists('curl_init') === false) { //curl_init is not defined //cURL not enabled }
//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. }
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,经过一番努力,你终于拯救了我