動かざることバグの如し

殿、温めておいたバグがこちらでございます

UbuntuでPHP7+Mecabのインストール

環境

流れとしてはphpインストール、mecabインストール、php-mecabのインストール、設定

PHPのインストール

恒例、レポジトリの追加

add-apt-repository ppa:ondrej/php
apt-get update

php-fpmのインストール。php-7.0-devをインストールしているのは後述するMecabのモジュールのビルドに必要なため。

apt install php7.0-fpm php-7.0-dev

nginxの設定を書き換えてPHPが動くようにする。デフォルトなら/etc/nginx/sites-available/default

location ~ .php$ {
  fastcgi_pass unix:/run/php/php7.0-fpm.sock;
  fastcgi_index index.php;
  include /etc/nginx/fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Mecabのインストール

省略

thr3a.hatenablog.com

コマンド上でecho おはよう| mecabが正しく動作できていれば大丈夫

php-mecab

適当なディレクトリ上で

git clone https://github.com/rsky/php-mecab.git

ビルド

cd php-mecab/mecab/
phpize
./configure
make
make install

/etc/php/7.0/mods-available/mecab.iniを作成して以下を記述

extension=mecab.so

phpコマンド単体でMecabが使えるようにさっきのファイルにシンボリックリンクを貼る

ln -s /etc/php/7.0/mods-available/mecab.ini /etc/php/7.0/cli/conf.d/20-mecab.ini

これでコマンド上のPHPからMecabが使えるようになったはず

root@vagrant:~# php -r "print_r(\MeCab\split('すもももももももものうち'));"
Array
(
    [0] => すもも
    [1] => も
    [2] => もも
    [3] => も
    [4] => もも
    [5] => の
    [6] => うち
)

今度はphp-fpmでも使えるように同様のシンボリックリンクを貼る

ln -s /etc/php/7.0/mods-available/mecab.ini /etc/php/7.0/fpm/conf.d/20-mecab.ini

再起動

service php7.0-fpm restart

適当なphpファイルで以下を試す

<?php
$str = "すもももももももものうち";

$mecab = new \MeCab\Tagger();
$nodes = $mecab->parseToNode($str);
var_dump($nodes);