SSL非対応IMAPをインストールしてしまったときの戻し方


PHP LogoGoogleApps導入メモ番外編、ということで、前回PHPでIMAP経由でGmailを取得する記事を書きましたが、いざ本番サーバでこれを実行すると、なぜか失敗したんです!テストサーバで、あのプログラムで動いたのになぜ!?

原因は本番サーバのIMAPがSSL非サポートであったこと。phpinfo(); で確認できる「imap」の項目にssl support項目がないため、失敗してました。なので、その問題を解決した時のメモ書きです。

yumでインストールした時は恐らく自動的にSSL対応IMAPになっているため、まずこの問題は起きないと思います。ですので、ソースからPHPやIMAPをインストールした時に発生するかと思います。

念のため、ソースでPHPやIMAPをインストールする方法を記録しておきます。

1
2
[root@hogehoge ~]# yum -y install php php-imap
...(インストール)...

これだけです。指定しなかった他の必要なパッケージも自動的にインストールしてくれます。

さて、ソースからインストールする場合。UNIVERSITY OF WASHINGTON からダウンロードすることができます。文章中にリンクがあるので、ちょっとわかりづらいかと思いますが、ftp…/mail/imap.tar.Zとなっている部分がダウンロードリンクです。で、これを解凍してインストールするわけですね。

1
2
3
4
5
[root@hogehoge ~]# ls
imap.tar.Z php # phpはもともとインストールしてあった過去のソースファイル
[root@hogehoge ~]# tar zxf imap.tar.Z  # 解凍
[root@hogehoge ~]# cd imap-2007f
[root@hogehoge imap-2007f]# make slx   # コンパイル

slxの部分はお使いの環境に応じて変更してください。オプション一覧は「Makefile」内に書かれています。

ちなみにここでmake slx SSLTYPE=noneとすると、SSL非対応IMAPの出来上がりです。以前自分はこうしてインストールしてしまったんですね・・・。なので、このSSLTYPEというオプションを外してmakeすればSSL対応済みIMAPになる、というわけです。

インストールはいつもの「make install」ではできません。必要なファイルをコピーして行う必要があります。

1
2
3
4
5
6
[root@hogehoge imap-2007f]# mkdir /usr/local/include/imap
[root@hogehoge imap-2007f]# mkdir /usr/local/include/imap/include
[root@hogehoge imap-2007f]# mkdir /usr/local/include/imap/lib
[root@hogehoge imap-2007f]# cp -p c-client/*.c /usr/local/include/imap/lib
[root@hogehoge imap-2007f]# cp -p c-client/*.h /usr/local/include/imap/lib
[root@hogehoge imap-2007f]# cp -p c-client/c-client.a /usr/local/include/imap/libc-client.a

最後のコピーは【libc-client.a】にリネームすることに気をつけましょう。こうしないと後々のPHPインストール時にエラーとなってしまいます。

最後にPHPを再コンパイルしてインストールすれば終了です。PHPのソースファイルはPHPプロジェクトのどこかに有ると思いますので、それをダウンロードしてください(だんだん書くのが面倒になってきたw)

1
2
3
4
5
6
7
[root@hogehoge imap-2007f]# cd ../php
[root@hogehoge php]# ./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-mbstring --enable-zend-multibyte --enable-ftp --with-imap=/usr/local/include/imap --with-imap-ssl --with-openssl
...(情報取得中)...
[root@hogehoge php]# make
...(コンパイル中)...
[root@hogehoge php]# make install
...(インストール中)...

これであとは phpinfo(); を覗けばIMAP覧にSSL supportという欄が現れるはずです。ここまでくればPHPからのIMAPでSSL接続することが可能になりますので、Gmailもうまく連携できるかと思います。