Mac本地多版本PHP环境安装Imagick

多版本PHP环境安装Imagick Imagick PHP安装Imagick

本地Mac上安装了多个版本的PHP,现在要用Imagick来处理png的裁剪,因为GD库处理png会把透明背景变成白色,安装过程有点曲折,所以记录一下完整过程,希望能帮到有需要的人。

第一步执行安装brew install imagemagick:

c6/68c0d3d4d983b9557ae2033674681f.png


看到这个的话,就是安装成功了:

Pruned 0 symbolic links and 1 directories from /opt/homebrew

==> Caveats

==> imagemagick

Ghostscript is not installed by default as a dependency.

If you need PS or PDF support, ImageMagick will still use the ghostscript formula if installed directly.


然后执行brew install autoconf,Mac可能自带这个,所以我执行的时候返回的是:


Warning: autoconf 2.72 is already installed and up-to-date.

To reinstall 2.72, run:

  brew reinstall autoconf


可忽略,继续:

pecl install imagick


安装过程会提示设置目录,直接回车,然后继续安装,最后会显示这个错误:

Build process completed successfully

Installing '/opt/homebrew/Cellar/php@7.4/7.4.33_9/include/php/ext/imagick/php_imagick_shared.h'

Installing '/opt/homebrew/Cellar/php@7.4/7.4.33_9/pecl/20190902/imagick.so'


Warning: mkdir(): File exists in System.php on line 294

PHP Warning:  mkdir(): File exists in /opt/homebrew/Cellar/php@7.4/7.4.33_9/share/php@7.4/pear/System.php on line 294


Warning: mkdir(): File exists in /opt/homebrew/Cellar/php@7.4/7.4.33_9/share/php@7.4/pear/System.php on line 294

ERROR: failed to mkdir /opt/homebrew/Cellar/php@7.4/7.4.33_9/pecl/20190902


本来以为是本地多版本的问题,然后去目录 /opt/homebrew/Cellar/php@7.4/7.4.33_9查看,

ls -l

total 376

drwxr-xr-x  12 ***  admin     384  4 18 19:35 bin

-rw-r--r--   ***  admin     789  4 18 19:35 homebrew.mxcl.php@7.4.plist

-rw-r--r--   ***  admin     285  4 18 19:35 homebrew.php@7.4.service

drwxr-xr-x   ***  admin      96  3 31 16:08 include

-rw-r--r--   ***  admin   11003  4 18 19:35 INSTALL_RECEIPT.json

drwxr-xr-x   ***  admin     128  3 31 16:08 lib

-rw-r--r--   ***  admin    3204  3 31 16:08 LICENSE

-rw-r--r--   ***  admin  106264  3 31 16:08 NEWS

lrwxr-xr-x   ***  admin      26  4 18 19:35 pecl -> /opt/homebrew/lib/php/pecl

-rw-r--r--   ***  admin     967  3 31 16:08 README.md

drwxr-xr-x   ***  admin      96  3 31 16:08 sbin

-rw-r--r--   ***  admin   53839  4 18 19:35 sbom.spdx.json

drwxr-xr-x   ***  admin     160  3 31 16:08 share


发现pecl指向的是另一个位置,把这个指向删除,新建一个正确的:

 ln -s /opt/homebrew/lib/php/pecl /opt/homebrew/Cellar/php@7.4/7.4.33_9/pecl

然后执行pecl install imagick
fb/b2cabdc31608132d197676ba892511.png

安装成功了,重启PHP

brew services restart php@7.4       

Stopping `php@7.4`... (might take a while)

==> Successfully stopped `php@7.4` (label: homebrew.mxcl.php@7.4)

==> Successfully started `php@7.4` (label: homebrew.mxcl.php@7.4)


查看拓展是否安装成功的时候会报错:

php -m | grep imagick   


0b/79ac4ddc590e9e32c85bfe9bd302fa.png           

PHP Warning:  PHP Startup: Unable to load dynamic library 'imagick' (tried: /opt/homebrew/lib/php/pecl/20190902/imagick (dlopen(/opt/homebrew/lib/php/pecl/20190902/imagick, 0x0009): tried: '/opt/homebrew/lib/php/pecl/20190902/imagick' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/php/pecl/20190902/imagick' (no such file), '/opt/homebrew/lib/php/pecl/20190902/imagick' (no such file)), /opt/homebrew/lib/php/pecl/20190902/imagick.so (dlopen(/opt/homebrew/lib/php/pecl/20190902/imagick.so, 0x0009): tried: '/opt/homebrew/lib/php/pecl/20190902/imagick.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/php/pecl/20190902/imagick.so' (no such file), '/opt/homebrew/lib/php/pecl/20190902/imagick.so' (no such file))) in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library 'imagick' (tried: /opt/homebrew/lib/php/pecl/20190902/imagick (dlopen(/opt/homebrew/lib/php/pecl/20190902/imagick, 0x0009): tried: '/opt/homebrew/lib/php/pecl/20190902/imagick' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/php/pecl/20190902/imagick' (no such file), '/opt/homebrew/lib/php/pecl/20190902/imagick' (no such file)), /opt/homebrew/lib/php/pecl/20190902/imagick.so (dlopen(/opt/homebrew/lib/php/pecl/20190902/imagick.so, 0x0009): tried: '/opt/homebrew/lib/php/pecl/20190902/imagick.so' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/opt/homebrew/lib/php/pecl/20190902/imagick.so' (no such file), '/opt/homebrew/lib/php/pecl/20190902/imagick.so' (no such file))) in Unknown on line 0


找不到so文件[挖鼻][挖鼻][挖鼻][挖鼻][挖鼻][挖鼻][挖鼻][挖鼻][挖鼻][挖鼻]

查看配置文件

php --ini

Configuration File (php.ini) Path: /opt/homebrew/etc/php/7.4

Loaded Configuration File:         /opt/homebrew/etc/php/7.4/php.ini

Scan for additional .ini files in: /opt/homebrew/etc/php/7.4/conf.d

Additional .ini files parsed:      /opt/homebrew/etc/php/7.4/conf.d/ext-opcache.ini

编辑/opt/homebrew/etc/php/7.4/php.ini发现第一行自动添加了extension="imagick.so",现在错误提示是找不到,所以要把这里的so文件位置写成正确的:

extension=/opt/homebrew/lib/php/20190902/imagick.so


保存后再次重启PHP,执行php -m | grep imagick就正常显示了,至此,拓展安装完成,去试了一下,果然就OK了,透明度不会变成白色了。


如果本地有多版本PHP,切换版本的时候,记得这样安装的扩展需要注释掉再切换版本,不然会报错!


这个问题折腾了好一会,仅限本人经历,仅供参考!



网站公告

承接各种网站、小程序、H5、公众号、CMS、CRM、OA等系统开发、维护、托管、外包等服务! 邮箱: 3163316168@qq.com