Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Install imagick extension in Mac OS Catalina : php_imagick.h:42:10: fatal error: 'php.h' file not found

I've followed these steps to install imagemagick and php extension imagick in my computer with Mac OS Catalina and I can't seem to find a way.

I always get the following error when trying to install imagick with $ sudo pecl install 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

I'm using php.7.3.11.

Apparently Mac OS X Catalina decided to move the headers to another folder and now it doesn't seem to find them.

I've been reading this answer but seems like the solution is too long to be true. Isn't there any other more simple and straight forward method?

It seems others manage to fix it for other extensions with much less trouble. However, I'm not quite sure the steps for Imagick are exactly the same...

like image 573
Alvaro Avatar asked Mar 27 '20 12:03

Alvaro


People also ask

How do I add imagick to PHP?

Navigate to Home - Software - Module Installers, then click on the Manage button next to PHP Pecl. In the next screen, select the required PHP version, then click Apply. You can now enter “imagick” in the Install a PHP Pecl field, and click the Install Now button.

Where is ImageMagick installed on Mac?

If ImageMagick is installed via MacPorts, then the convert command lives in /opt/local/bin/. It is this directory that needs to get on the PATH environment variable.


1 Answers

I had this same issue with my new MacBook Air and Catalina. It was a because I did not have PHP installed with brew. I looked at the page you linked to, and I am assuming you have already completed the brew install pkg-config imagemagick. This is what I would do to get clean it up and get it working, see below.

Remove your existing imagemagick and pkg-config that were just installed (and PHP if it shows up in the versions list)

First, we get the php @ver name if necessary. If you don't see PHP in the list then we don't need to remove it, just remove the other two.


    brew list --versions
    ...
    imagemagick 7.0.10-0
    ...
    pcre 8.44
    [email protected] 7.3.16
    pkg-config 0.29.2_2
    ...

Stop the php service if it is running, in my case it is @7.3

brew services stop [email protected]

Next we remove the items having issue

brew remove [email protected] pkg-config imagemagick

or simply

brew remove pkg-config imagemagick if PHP not installed with brew

Restart your computer (optional, but I like to do it)

Now we install the items again, include PHP this time if it was not installed with brew last time

brew install [email protected] pkg-config imagemagick

Add PHP to your path for cmd line if not already there (optional)

echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.bash_profile

echo 'export PATH="/usr/local/opt/[email protected]/sbin:$PATH"' >> ~/.bash_profile

To have launchd start [email protected] now and restart at login:

brew services start [email protected]

Or, if you don't want/need a background service you can just run:

php-fpm

Confirm PHP and imagemagick and perl/pecl are the expected versions

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

Now install iMagick using pecl

pecl install imagick

hit ENTER when you see the path question for 'autodetect'

When it's complete you can confirm the module is loaded php -m | grep imagick

if it's loaded it will return one line with the word imagick

Test from command line imagick installed correctly cd to your user home dir cd ~

Run PHP as interactive shell from cmd line

php -a

Code to test at cmd line:

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

Exit php interactive mode by typing exit, then check if the bright blue test_imagick.jpg was created in your user dir

Troubleshooting Notes

If you are getting a warning about:

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

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

This may be left over from the previous pecl install that did not complete. Check your php.ini file and remove duplicate extension="imagick.so" entry

like image 137
mstephenson Avatar answered Sep 23 '22 10:09

mstephenson