10

sudo pecl install mailparse ends with:

Build process completed successfully
Installing '/usr/lib64/php/5.5/modules/mailparse.so'
install ok: channel://pecl.php.net/mailparse-2.1.6
configuration option "php_ini" is not set to php.ini location
You should add "extension=mailparse.so" to php.ini

After adding extension=mailparse.so to the Dynamic Extensions section of php.ini, running php prints this:

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/5.5/modules/mailparse.so' - /usr/lib64/php/5.5/modules/mailparse.so: undefined symbol: mbfl_convert_filter_flush in Unknown on line 0

Val Kornea
  • 4,469
  • 3
  • 40
  • 41

2 Answers2

17

Solution

mailparse must be loaded after mbstring, and mbstring is loaded by /etc/php-5.5.d/mbstring.ini which is read after php.ini.

Merely adding mailparse.ini to php-5.5.d will not work, because ini files are loaded alphabetically; though you could just name it zz_mailparse.ini instead.

Loading both extensions in only(sic) php.ini results in:

PHP Warning:  Module 'mbstring' already loaded in Unknown on line 0
PHP Warning:  Module 'mailparse' already loaded in Unknown on line 0

That one's a mystery.

Proof

$ echo '<?php echo extension_loaded("mailparse") ? "mailparse loaded\n" : "mailparse not loaded\n";' > ~/is_mailparse_loaded.php
$ php ~/is_mailparse_loaded.php
mailparse loaded
$ pwd
/etc/php-5.5.d
$ sudo mv zz_mailparse.ini mailparse.ini
$ php ~/is_mailparse_loaded.php
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/5.5/modules/mailparse.so' - /usr/lib64/php/5.5/modules/mailparse.so: undefined symbol: mbfl_convert_filter_flush in Unknown on line 0
mailparse not loaded
$ sudo mv mailparse.ini zz_mailparse.ini
$ php ~/is_mailparse_loaded.php
mailparse loaded
$
Val Kornea
  • 4,469
  • 3
  • 40
  • 41
  • 1
    This is somewhat old, but you can solve this by adding `; priority=30` on the second line of `mailparse.ini`. Then it will be symlinked to `30-mailparse.ini`, and loaded after `20-mbstring.ini` – Alex Grin May 03 '17 at 10:56
  • I had this issue after upgrading form PHP 7.0 to 7.1. Thanks for the solution! :) – gen_Eric Nov 14 '17 at 15:55
5

A quick one-liner:

sudo bash -c "echo 'extension=mailparse.so' >> /etc/php.d/zz_mailparse.ini"

EDIT - Some installations are in other dirs, just make sure:

sudo bash -c "echo 'extension=mailparse.so' >> /etc/php-7.0.d/zz_mailparse.ini"
redolent
  • 4,159
  • 5
  • 37
  • 47
  • 1
    Warning for different installations. In my case I had to use `echo 'extension="mailparse.so"' > /etc/php-7.0.d/zz_mailparse.ini` – Mauro May 26 '17 at 18:02