さくら共有サーバー、php_mecabのインストール方法

この記事について

環境さくら共有サーバー、php-mecab 0.5.0、PHP 5.3
目的php_mecabをインストールしてPHPからmecabを使えるようにする
結果phpize→configure→make installし、Makefile修正でローカルにインストール。php.iniにextension設定を追記

つまずきポイント要約

  • configureのphp-configはphpinfoで確認した使用中バージョンと必ず合わせる
  • make installのPermission denied→MakefileのEXTENSION_DIRをローカルに書き換え
  • extension_dirは「…/php-mecab-0.5.0/modules」を指定(lib/php/extensionsではダメだった)
  • phpizeが使えないサーバー(エックスサーバー等)ではインストール不可

さくら共有サーバー、php_mecabのインストール方法

前提として、mecab の辞書にアクセスする必要があるので辞書をローカルフォルダ以下にインストールしておく必要がある(さくらに最初から入っている辞書を使うこともできるが、htmlファイルが UTF-8 の場合、デフォルトの辞書が EUC なので文字化けしてしまう)。
さくら共有サーバー、UTF-8の辞書でmecabを使う方法 ←この作業を済ませておく

1.ファイルを解凍してビルド

tar xvfz php-mecab-0.5.0.tgz ←解凍

cd php-mecab-0.5.0 ←ディレクトリ移動

phpize ←拡張モジュールをビルド(ソースファイルから実行可能なファイルを作成。configureファイルができる)
※-ize(アイズ)・・・~化する。~で扱う。

※エックスサーバーでは phpize は使えないので php_mecab はインストールできない。yum や rpm コマンドが使えないので phpize の追加もできない。どうしても phpize が使えない環境で PHP + mecab を実行したいなら PHP の EXEC 関数でコマンドラインを操作してすることならできそう?

2.「configure」を実行

./configure --with-mecab=/usr/local/bin/mecab-config --with-php-config=/usr/local/php/5.3.27/bin/php-config

php-configのバージョンは必ずあわせる。現在使用しているphpのバージョンをphpinfoで確認。今回は「5.3.27」。指定しなくてデフォルトのバージョンが呼び出されるとうまくいかない。phpのバージョンはターミナルから「php -v」でも調べられるが出てきたバージョンのフォルダ名がない場合がある(php -v で「5.45」と出たが存在するフォルダは「5.4」だった)。使用しているphp のバージョンはサーバーコントロールにログインして調べるといい。
mecab-configの場所は「which mecab-config」で特定できる。自前の mecab をインストールしている場合はそちらのパスを指定する。

3.コンパイルとインストール

make ←コンパイル
make install ← インストール

インストールするとエラーメッセージが出た

Installing shared extensions:     /usr/local/php/5.3.27/lib/php/extensions/no-debug-non-zts-20090626/
cp: /usr/local/php/5.3.27/lib/php/extensions/no-debug-non-zts-20090626/#INST@99219#: Permission denied

権限のないところにインストールを試みているよう。
ローカルフォルダにインストールするように、Makefileをいじる。(make実行後に作成されるファイル)

Makefileの変更箇所

#EXTENSION_DIR = /usr/local/php-5.x.x/lib/php/extensions/no-debug-non-zts-20060613 ←コメントアウト
EXTENSION_DIR = $(HOME)/local/lib/php/extensions/no-debug-non-zts-20060613 ←追記
※「20060613」とかフォルダ名は合わせるといい。

再びmake installすると無事にインストールが完了するはず。

4.続いて、PHPの起動時に読み込まれる拡張モジュールを設置するディレクトリの設定

PHP.iniに拡張モジュールの置き場を記述する

PHP.iniに記述(追記)する内容

extension_dir="/home/username/local/php-mecab-0.5.0/modules"
extension=mecab.so

※拡張子 so は shared object の略。UNIX系OSの共有ライブラリのファイル形式。

最初、こう書いたら動かなくてハマった。

extension_dir="/home/username/local/lib/php/extensions"
extension=mecab.so

作業時に出力されたメッセージを見てとりあえず動くところまで持ってこれた。

Libraries have been installed in:
   /home/sunsdoor/local/php-mecab-0.5.0/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the `-LLIBDIR'
flag during linking and do at least one of the following:
   - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
     during execution
   - add LIBDIR to the `LD_RUN_PATH' environment variable
     during linking
   - use the `-Wl,--rpath -Wl,LIBDIR' linker flag

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.

UTF-8の辞書を使いたいのでphp.iniに追記

mecab.default_dicdir=/path/ ←辞書
mecab.default_userdic=/path/ ←ユーザ辞書

※UTF-8 の辞書を使う場合は phpファイルの保存形式やメタタグ(headタグ内)の文字コードも UTF-8 に揃える必要がある。

自分の環境だといずれか(dicrcとかsys.dicがあるフォルダ)

mecab.default_dicdir="/home/username/local/mecab-dic/ipadic-utf8"
mecab.default_dicdir="/home/username/local/lib/mecab/dic/ipadic"

うまくいっていたらphpinfoにmecabの項目が表示されている。

関連記事

タイトルとURLをコピーしました