Laef
Laef

Reputation: 1145

Adding IMAP to PHP 7.2 on OSX

I'm using PHP 7.2 on OS X El Capitan, installed using Homebrew (of course). Now I'd like to use some IMAP functions from PHP's IMAP extension, but no matter what I search for, I can't find a way to add the extension on OSX.

Some things I've tried... I have, of course, tried the most commonly recommended approach:

$ brew reinstall php --with-imap

Yet this fails, returning:

Warning: php: this formula has no --with-imap option so it will be ignored!

Another method, which I found mentioned in passing, also fails:

$ brew install php72-imap

Error: No available formula with the name "php72-imap" 
==> Searching for a previously deleted formula (in the last month)...
Warning: homebrew/core is shallow clone. To get complete history run:
  git -C "$(brew --repo homebrew/core)" fetch --unshallow

Error: No previously deleted formula found.
==> Searching for similarly named formulae...
Error: No similarly named formulae found.
==> Searching taps...
==> Searching taps on GitHub...
Error: No formulae found in taps.

I'm not exactly sure which direction to go in with this. I'm sure there's an easy, probably documented, way of doing this, but I am yet to find it. Perhaps I'm just looking in the wrong places and using the wrong search terms...

Upvotes: 27

Views: 30094

Answers (6)

Vantomas
Vantomas

Reputation: 161

There is a much better way to recompile php with IMAP extension directly using Homebrew.

UPDATE 2023/09: this procedure works even with the php8. Just use php instead of versioned formula php@7.4. Please note openssl has changed version to openssl@3.

  1. Run brew edit php@7.4

  2. Add depends_on "imap-uw" at the end of the depends_on section

  3. Check which version of openssl is in the depends_on section

  4. Add --with-imap=#{Formula["imap-uw"].opt_prefix} at the end of the --with section

  5. Add --with-imap-ssl=#{Formula["openssl@1.1"].opt_prefix} after --with-imap. Check sure it is the same version as in the depends_on section

  6. Run HOMEBREW_NO_INSTALL_FROM_API=1 brew reinstall --build-from-source php@7.4
    UPDATE 2023/02: If you dont prepend with HOMEBREW_NO_INSTALL_FROM_API=1, then modified file is not used. Behavior changed from 2023/01, more on https://github.com/Homebrew/brew/pull/14412

  7. It is not necessary to enable the php_imap.so extension in php.ini, because it is already compiled into PHP. You can check phpinfo();

In case of a formula update in the feature, just edit the formula again and reinstall with --build-from-source.

Upvotes: 16

Aikulian
Aikulian

Reputation: 141

After expired kabel/php-ext/php@7.2-imap, I used another tap:

brew tap shivammathur/php

brew tap shivammathur/extensions

brew install imap@7.2

Upvotes: 14

Ortomala Lokni
Ortomala Lokni

Reputation: 62663

Kevin Abel is providing some of the PHP extensions removed from Homebrew/core. You can install the IMAP extension with:

brew tap kabel/php-ext
brew install php-imap

To install a specific version, such as 7.2 use:

brew install php@7.2-imap

Upvotes: 40

Vishal Sancheti
Vishal Sancheti

Reputation: 19

For those who have trouble in Mojave, I have forked the repository and fixed it use: brew tap vishal-sancheti/php-ext instead

Upvotes: 1

wtorsi
wtorsi

Reputation: 732

This answer for those who prefer installing imap ext using native commands without adding other taps or smth else.

In short we need to compile extension from sources. Ok, here is the process.

$ # Download sources from php.net of already installed php version. 
$ cd ~/Downloads
$ wget https://www.php.net/distributions/php-7.3.5.tar.gz
$ gunzip php-7.3.5.tar.gz
$ tar xvf php-7.3.5.tar
$ # Go to ext dir 
$ cd php-7.3.5/ext/imap
$ # prepare extension using phpize command, you should 
$ # ensure that you use phpize of proper version from 
$ # already installed php version as checking the API version for example
$ phpize
$ # prepare dependencies
$ # install openssl and imap
$ brew install openssl
$ brew install imap-uw
$ # after all installation check the installed paths of the exts
$ ./configure --with-kerberos --with-imap-ssl=/usr/local/Cellar/openssl/1.0.2r/ --with-imap=/usr/local/Cellar/imap-uw/2007f/
$ make
$ # get extension dir 
$ php -i | grep extension_dir
extension_dir => /usr/local/lib/php/pecl/20180731 => /usr/local/lib/php/pecl/20180731
$ cp modules/imap.so /usr/local/lib/php/pecl/20180731/
$ # add extension to your php.ini
# [imap]
# extension="imap.so"

That's it. Be lucky!

Upvotes: 11

Alex
Alex

Reputation: 5904

Here is how I solved this problem under Mojave:

First, I installed IMAP module for PHP 7.2

brew install kabel/php-ext/php@7.2-imap

Secondly I copied the imap.so from installed folder to the 'extension_dir' used by php.ini

sudo cp /usr/local/lib/php/20170718/imap.so to /usr/local/lib/php/pecl/20170718

Upvotes: 17

Related Questions