PHP警告:在未知的第0行已经加载了模块'imagick'。

12

我有一个简单的测试文件,其中唯一的php代码是:

if (isset($_REQUEST['back']) && ($back != '')) { $back = $_REQUEST['back']; }
$filename = 'images/'.$back.'.jpg';
$file = (file_exists($filename)) ? $back : 'back1';

每次运行文件时,我会在错误日志中看到这一行PHP Warning: Module 'imagick' already loaded in Unknown on line 0。请问有什么建议吗?


2
错误意味着你在某个地方尝试加载模块两次。可能是在 Apache 配置中。 - Cfreak
谢谢CFreak,但那与某个地方的三行代码有关。你看到这里有什么问题吗? - Jeremy Roy
8
问题不在于那三行代码,而是"imagick"库被重复加载了。问题要么出现在php.ini文件中,要么是在某个地方使用了dl函数加载了该库。 - Francois Deschenes
我在使用PHP 7.3时遇到了这个问题,我通过升级到7.4来解决它。 - JOB
8个回答

11
打开您的php.ini文件并注释掉以下内容。
;extension=imagick.so

这解决了我的问题。


2

请确保您只激活imagick一次。
如果是Windows系统:
激活 extension=php_imagick.dll 并注释/删除 ;extension=imagick
按照此教程操作

最初的回答

2

extension=imagick.so在我的php.ini中不存在,所以我通过在Home >> 软件 >> 模块安装程序 - "PHP Pecl" 安装程序下重新安装imagick(3.4.4)来解决它。

目前没有更多错误。


注:Original Answer翻译成“最初的回答”未能理解上下文,请提供更多信息。

1
我不知道为什么,但是我在 /etc/php.d/ 文件夹中有两个 imagick.ini 文件。
    # ls -l /etc/php.d/*imag*
    -rw-r--r--. 1 root root  21 15. Aug 11:46 /etc/php.d/20-imagick.ini
    -rw-r--r--. 1 root root 530 12. Jan 2022  /etc/php.d/40-imagick.ini

我将其中一个注释掉了

extension=imagick.so

在这些文件中的一行中加入了代码,错误就消失了。


1
这些库也可以通过在 /etc/php.d 中使用 ini 文件来加载。请确保它不在此处的文件中,也不在 php.ini 中。

1
仅供记录,可能有助于其他使用共享主机(cPanel)的人。
我在共享主机php7.2上遇到了错误: “在未知行上加载了模块'imagick'”
一开始,主机提供商说这是我的错误配置(运行Yii2.16)。但是在我向他们展示了所有与互联网相关的问题与服务器配置后,他们开始听我说话。在我证明没有php7.1上的错误之后,他们开始寻找错误。
他们确认,在更新(错误之前)7.2至新版本(7.2.14)时,修复了其他一些错误,但是Imagick错误开始出现。现在他们也找到了解决方法。正如他们告诉我的那样-错误在PERL模块或PEAR包的配置中,但他们没有告诉我真正的问题。
解决方案,如果您使用共享主机,请与您的提供商交谈并尝试更改PHP版本(如果可以更改)。

0
安装了PHP的imagick扩展后,当我执行php-fpm -v时,遇到了同样的问题,如下所示:
[root@localhost]# php-fpm -v
[10-Oct-2018 16:00:33] NOTICE: PHP message: PHP Warning:  Module 'imagick' already loaded in Unknown on line 0

因为我在安装 PHP 的 Imagick 扩展时手动创建了 echo extension=imagick.so >> php.iniecho extension=imagick.ini ,所以现在我要删除 imagick.ini,然后重新启动 PHP。这样问题就解决了!

0

通过对这个问题的繁琐分析,我发现了一个解决方案,如果您尝试使用PECL卸载和安装ImageMagick,并且在imagick.so文件出现某些问题时,该方法可能能够修复系统。!由于在带有CPanel的服务器上愚蠢地进行“源代码安装”,以实际获得WebP支持。

但是,您不需要复制我的方法,只需要做以下事情:

实际上是在EasyApache 4中重新安装此模块:

mod_lsapi

重新安装模块后,您将能够通过该模块重置php.ini文件。然后,等待另一个完整的error_log就容易了,从现在开始可能不会再出现错误。

选项2:

我尝试使用yum和PECL卸载所有rpm,并使用ImageMagick作为源文件安装整个系统,但一开始很难让ImageMagick源代码找到正确的位置将imagick.so文件放入扩展文件夹中。因为在另一个带有CPanel的目录中:

/opt/cpanel/ea-php74/root/usr/lib64/php/modules

如果您已经尝试过源代码安装,那么您可能想要卸载所有的.rpm文件,但这仅适用于在Cpanel系统中已经从源代码进行了安装。

yum remove ImageM* 

并从源代码安装Imagick。如果你无法做到这一点,请从源代码安装ImageMagick并启用共享功能。此外,在进行源代码安装后,您还需要从PECL中删除ImageMagick模块。在卸载并使用源代码版本的ImageMagick之前,请确保imagick.so仍然位于此目录中,并且该模块仍然通过PECL安装:

cp /opt/cpanel/ea-php74/root/usr/lib64/php/modules/imagick.so /root/tmp
cp /root/tmp/imagick.so /opt/cpanel/ea-php74/root/usr/lib64/php/modules

要找到您自己的模块文件夹,请使用:

php -i | grep extension_dir

请记住,我使用的是php74版本和CPanel,在这种情况下,只有CPanel用户或在不同位置使用php74的用户才存在此问题。请使用正确的PHP版本,而不是php74。

为了使共享安装ImageMagick源正确,请执行以下操作:

./configure --enable-shared
make 
make install

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接