在Mac OS Catalina中安装Imagick扩展:php_imagick.h:42:10:致命错误:找不到'php.h'文件。

10

我按照这些步骤安装了imagemagick和php扩展程序imagick在我的Mac OS Catalina 计算机上,但无法找到方法。

每次尝试使用$ sudo pecl install imagick安装imagick时,我始终会遇到以下错误:

php_imagick.h:42:10: fatal error: 'php.h' file not found
#include "php.h"
         ^~~~~~~
1 error generated.
make: *** [imagick_file.lo] Error 1
ERROR: `make' failed

我正在使用php.7.3.11

显然,Mac OS X Catalina决定将头文件移动到另一个文件夹中,现在似乎找不到它们了。

我一直在阅读这个答案,但看起来解决方法太长了,似乎不可行。难道没有其他更简单明了的方法吗?

其他人似乎用更少的麻烦为其他扩展程序修复了该问题。但是,我不太确定Imagick的步骤是否完全相同...


我在macOS 10.15.4上使用这些指令和sudo pecl install imagick安装imagick时没有遇到任何问题。*install ok: channel://pecl.php.net/imagick-3.4.4*;如果我运行php -m | grep -i magic,我可以看到它。这个问题只与PHP 7.3有关吗?我只是brew install php,它得到了PHP 7.4.4 - Christos Lytras
2个回答

10
我在我的新MacBook Air和Catalina上遇到了同样的问题。由于我没有使用brew安装PHP,因此出现了这个问题。我查看了您提供的页面,并假设您已经完成了“brew install pkg-config imagemagick”。这是我会处理并使其工作的方式,请参见以下内容。
删除刚安装的imagemagick和pkg-config(如果在版本列表中显示了PHP,则还要删除它)
首先,如果必要,我们获取php @ver名称。如果您在列表中看不到PHP,则无需删除它,只需删除其他两个即可。

    brew list --versions
    ...
    imagemagick 7.0.10-0
    ...
    pcre 8.44
    php@7.3 7.3.16
    pkg-config 0.29.2_2
    ...

如果php服务正在运行,请停止服务,在我的情况下是@7.3版本

brew services stop php@7.3

接下来,我们删除有问题的项目

brew remove php@7.3 pkg-config imagemagick

或者简单地说

brew remove pkg-config imagemagick 如果没有使用brew安装PHP

重新启动计算机(可选,但我喜欢这样做)

现在,我们再次安装项目,如果上次没有使用brew安装PHP,则包括PHP

brew install php@7.3 pkg-config imagemagick

将PHP添加到命令行路径(如果尚未添加)(可选)

echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile

echo 'export PATH="/usr/local/opt/php@7.3/sbin:$PATH"' >> ~/.bash_profile

要立即启动php@7.3并在登录时重新启动,请执行以下操作:

brew services start php@7.3

或者,如果不需要后台服务,则可以直接运行:

php-fpm

确认PHP、imagemagick和perl/pecl是否是预期的版本

php -v

PHP 7.3.16 (cli) (built: Mar 19 2020 11:19:09) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.16, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.16, Copyright (c) 1999-2018, by Zend Technologies

convert --version

Version: ImageMagick 7.0.10-0 Q16 x86_64 2020-04-04 https://imagemagick.org
Copyright: © 1999-2020 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules OpenMP(3.1) 
Delegates (built-in): bzlib freetype gslib heic jng jp2 jpeg lcms ltdl lzma openexr png ps tiff webp xml zlib

pecl version

PEAR Version: 1.10.10
PHP Version: 7.3.16
Zend Engine Version: 3.3.16
Running on: Darwin mbookair.local 19.4.0 Darwin Kernel Version 19.4.0: Wed Mar  4 22:28:40 PST 2020; root:xnu-6153.101.6~15/RELEASE_X86_64 x86_64

使用pecl安装iMagick

pecl install imagick

当您看到“autodetect”的路径问题时,请按ENTER键

安装完成后,您可以确认该模块已加载 php -m | grep imagick

如果已加载,它将返回一个带有单词imagick的行

从命令行测试是否正确安装了imagick 进入用户主目录 cd ~

从命令行运行交互式PHP shell

php -a

在命令行上测试的代码:

$im = new Imagick ();
$im->newImage (300, 225, "blue");
$im->writeImage ("test_imagick.jpg");

通过打出exit退出php交互模式,然后检查您的用户目录中是否创建了明亮蓝色的test_imagick.jpg。

故障排除注意事项

如果您收到以下警告:

"PHP Warning:  Module 'imagick' already loaded in Unknown on line 0

Warning: Module 'imagick' already loaded in Unknown on line 0"

这可能是之前未完成的pecl安装留下的。请检查您的php.ini文件并删除重复的extension="imagick.so"条目。

1
我简直不敢相信安装过程会这么复杂...难道没有更人性化的方式吗?如果我们必须要做这么多工作才能安装一个简单的扩展,我感觉PHP出了很大问题。 - Alvaro
2
我的回答比较长,因为我试图提供有关如何解开您可能已经完成的任何操作并进行某种新安装的说明,并提供一种在PHP命令行中测试以确保imagick已安装和正常工作的方法。简短的答案是:1) brew install php@7.32) brew reinstall pkg-config imagemagick3) pecl install imagick。这样可以吗? - mstephenson
当执行 pecl install imagick 时,会显示相同的错误。 - Raptor
非常好的答案,谢谢!对我有用。我终于下定决心将Mac OS转移到Homebrew上进行php编程,现在更容易了! - Luc
对我来说,只需添加两个bash_profile行并使用source .bash_profile即可。 - TeT Psy

0

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