О, сколько умных слов в заголовке! С этим я вчера провозился долго, но решил задачку.
А столкнулся я вот с чем — в MAMP (MacOS Apache MySQL PHP) некорректно работал плагин imap.so — на любую попытку достучаться по POP3 SSL или IMAP SSL он выдавал ошибку неверной конфигурации пути к ящику. После недолгих исследований выяснилось, что модуль imap.so собран без поддержки SSL. Пришлось разбираться, как же его пересобрать под MAMP правильно. Скачал в итоге последний XCode, Command Line Tool, сорцы всего и все… Но сделал.
На этом мои приключения не закончились. Когда модуль перестал ругаться на неправильную конфигурацию, он начал ругаться на kerberos.
Kerberos error: Credentials cache file not found (try running kinit)
Информативно, мда… Опять же — пошел я в гугл и нашел, что у MS Exchange 2007/2010 имеется сей досадный баг совместимости с PHP IMAP. Надо отключить kerberos при сборке imap.so. И тут я встал в ступор — да как же это сделать?! Ну сам PHP я отконфигурировал легко, а модуль отказывался собираться без поддержки kerberos ни в какую. В два часа ночи проблема была решена. Может и не красиво я ее решил, меня опытные *никсоиды поправят, но это работает на отлично!
Поехали? Тогда нам понадобятся:
- XCode
- Command Line Tool
- MAMP Server Components Library (это из чего, типа, собран MAMP)
- Могут понадобится исходники для определенной версии PHP
- Последняя редакция IMAP, на момент написания статьи — 2007f, можно найти в гугле.
- telnet 🙂 он есть в системе, вся работа будет вестись через него
Что и куда разворачиваем?
Создаем папку /Applications/MAMP/bin/php/sources/
В принципе ее можно создать где угодно, но я вот решил собирать все в одной куче, чтобы потом при деинсталляции это удалилось вместе с ним.
В эту папку разворачиваем исходники imap и php (может еще понадобится autoconf, но об этом чуть позже)
В итоге дерево папок будет выглядеть так (на примере для php 5.4.4):
/Applications/MAMP/bin/php/sources/php.5.4.4/
/Applications/MAMP/bin/php/sources/imap-2007f/
Если не будет удаваться команда ./configure, то нам может понадобится autoconf — он находится в составе MAMP Server Components Library. Разворачиваем его, заходим в папку, куда мы его развернули исполняем:
./configure
make
make install
Теперь подготовим папки для клиента IMAP SSL.
sudo mkdir -p /usr/local/includesudo mkdir /usr/local/lib
Сборка с поддержкой kerberos:
cd /Applications/MAMP/bin/php/sources/imap-2007f/ make osx EXTRACFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" sudo cp c-client/*.h /usr/local/include/ sudo cp c-client/*.c /usr/local/lib/ sudo cp c-client/c-client.a /usr/local/lib/libc-client.a cd /Applications/MAMP/bin/php/sources/php.5.4.4/ ./configure cd ext/imap phpize ./configure --with-imap=/Applications/MAMP/bin/php/sources/imap-2007f/ --with-kerberos --with-imap-ssl=/usr/ make
(внимание!!! обратите внимание на версию PHP API! Я столкнулся, что в MAMP Pro 2.1.1 для PHP 5.2.17 версия API отличалась от той, какую я собираю)
Сборка с отключенной поддержкой kerberos
А вот тут нам понадобится открыть на редактирование файл /Applications/MAMP/bin/php/sources/imap-2007f/Makefile и сразу после конфигурации osx дополнить еще одну конфигурации сборки
osxnk: osxok an $(TOUCH) ip6 $(BUILD) BUILDTYPE=$@ IP=$(IP6) EXTRAAUTHENTICATORS="$(EXTRAAUTHENTICATORS)" \ SPECIALS="SSLINCLUDE=/usr/include/openssl SSLLIB=/usr/lib SSLCERTS=/System/Library/OpenSSL/certs SSLKEYS=/System/Library/OpenSSL/private"
Собираем…
cd /Applications/MAMP/bin/php/sources/imap-2007f/ make osxnk EXTRACFLAGS="-fPIC -arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" sudo cp c-client/*.h /usr/local/include/ sudo cp c-client/*.c /usr/local/lib/ sudo cp c-client/c-client.a /usr/local/lib/libc-client.a cd /Applications/MAMP/bin/php/sources/php.5.4.4/ ./configure --without-kerberos cd ext/imap phpize ./configure --with-imap=/Applications/MAMP/bin/php/sources/imap-2007f/ --with-kerberos --with-imap-ssl=/usr/
Оппа, заметите вы — а зачем флаг —with-kerberos? Мы же без него собираем?!! А потому что есть некая ошибочка в скриптах конфигурации, поэтому нам придется перед сборкой поправить файл, который сотворит этот скрипт.
Правим файл: /Applications/MAMP/bin/php/sources/php.5.4.4/ext/imap/config.h
Ищем в нем строку #define HAVE_IMAP_KRB 1 — заменяем ее на #undef HAVE_IMAP_KRBВыполняем команду make
Завершаем увлекательный процесс
Если все прошло удачно, то в папке /Applications/MAMP/bin/php/sources/php.5.4.4/ext/imap/modules появится необходимый нам файлик — imap.so, его надо разместить туда, куда нужно.
cp modules/imap.so /Applications/MAMP/bin/php/php5.4.4/lib/php/extensions/no-debug-non-zts-20090626/
Помните, я сказал, что следует проконтролировать версию PHP API? Вот выделенное — она и есть.
Теперь перезапускаем MAMP (естественно его сервис Apache) и вуаля!
Добавить комментарий