facebook twitter hatena line email

「Mecab/php8実装」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ページの作成:「 ==php7.0でmecabを動かす== php7でmecabを動かそうとすると以下エラーが出る PHP Fatal error: Uncaught Error: Call to undefined function mecab_split(...」)
 
(インストール)
 
(同じ利用者による、間の3版が非表示)
行1: 行1:
 
==php7.0でmecabを動かす==
 
php7でmecabを動かそうとすると以下エラーが出る
 
PHP Fatal error:  Uncaught Error: Call to undefined function mecab_split()
 
 
こちらにphp7で対応されてるphp_mecabがあるとのことだったので入れてみた
 
 
参考:https://twitter.com/rsky/status/672877419674468352 https://github.com/rsky/php-mecab
 
 
 
===インストール===
 
===インストール===
 
  $ cd /usr/local/src
 
  $ cd /usr/local/src
  $ git clone https://github.com/rsky/php-mecab
+
  $ git clone https://github.com/ranvis/php-mecab.git
 
  $ cd php-mecab/mecab
 
  $ cd php-mecab/mecab
 
  $ sudo phpize
 
  $ sudo phpize
行18: 行9:
 
  $ sudo make install
 
  $ sudo make install
 
  Installing shared extensions:    /usr/lib64/php/modules/
 
  Installing shared extensions:    /usr/lib64/php/modules/
  $ php -r "print nl2br(print_r(mecab_split("すもももももももものうち")));"
+
  $ php -r 'print_r(\MeCab\split("すもももももももものうち"));'
 
  PHP Warning:  Module 'mecab' already loaded in Unknown on line 0
 
  PHP Warning:  Module 'mecab' already loaded in Unknown on line 0
 
  PHP Fatal error:  Uncaught Error: Call to undefined function mecab_split() in Command line code:1
 
  PHP Fatal error:  Uncaught Error: Call to undefined function mecab_split() in Command line code:1
行26: 行17:
 
<pre>
 
<pre>
 
which mecab-config
 
which mecab-config
/usr/bin/mecab-config
+
/bin/mecab-config
 
</pre>
 
</pre>
  
 
以下を実行
 
以下を実行
  ./configure --with-mecab=/usr/bin/mecab-config
+
  ./configure --with-mecab=/bin/mecab-config
  
 
==php.ini確認==
 
==php.ini確認==
/etc/php.d/mecab.ini
+
/etc/php.d/mecab.ini に以下を追加
 
  extension=mecab.so
 
  extension=mecab.so
  
行43: 行34:
 
mecab_split()ではなく\MeCab\split()に変更されている様子。
 
mecab_split()ではなく\MeCab\split()に変更されている様子。
  
  $ php -r "print_r(\MeCab\split("すもももももももものうち"));"
+
  $ php -r 'print_r(\MeCab\split("すもももももももものうち"));'
 
  Array
 
  Array
 
  (
 
  (

2026年4月7日 (火) 11:24時点における最新版

インストール

$ cd /usr/local/src
$ git clone https://github.com/ranvis/php-mecab.git
$ cd php-mecab/mecab
$ sudo phpize
$ ./configure --with-mecab=/bin/mecab-config
$ make
$ make test
$ sudo make install
Installing shared extensions:     /usr/lib64/php/modules/
$ php -r 'print_r(\MeCab\split("すもももももももものうち"));'
PHP Warning:  Module 'mecab' already loaded in Unknown on line 0
PHP Fatal error:  Uncaught Error: Call to undefined function mecab_split() in Command line code:1

configure実行時"mecab-config... configure: error: not found"エラーとなる場合

本体の場所を確認

which mecab-config
/bin/mecab-config

以下を実行

./configure --with-mecab=/bin/mecab-config

php.ini確認

/etc/php.d/mecab.ini に以下を追加

extension=mecab.so

読み込み確認

$ php -m | grep mecab
mecab

確認

mecab_split()ではなく\MeCab\split()に変更されている様子。

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

参考:https://teratail.com/questions/27491

MeCab_Taggerも変更

Fatal error: Uncaught Error: Class 'MeCab_Tagger' not found
// $mecab = new MeCab_Tagger(); // php5.6
$mecab = new \MeCab\Tagger(); // php7