mb関数の使い方 - PHPプロ!Q&A掲示板

1959

  • 0P

mb関数の使い方

質問日時 / 2009年4月2日 13:57    回答数 / 9件

Questioner:  FireCrazy  このエントリーをはてなブックマークに追加 

キーワード / PHP5.2.9    mb関数   

WindowsXP(SP3),PHP5.2.9の環境でPHPを勉強しています。

mb_strlenmb_substrなどの関数を使うとエラー表示が発生しますが、原因と解決方法がわかりません。

書いたコード↓
  1. <?php
  2. $word = mb_strlen("*********",3);
  3. echo $word;

実行時のエラー表示↓
  1. Fatal error: Call to undefined function mb_strlen() in C:\*****\*****\*****.php on line 2

調べてみてphp.iniの中をのコードをmbstring.language = Japanese や 
mbstring.func_overload = 0 にしましたがエラーが解消しません。
phpを始めて2日でまだよく分からない状態です。申し訳ありませんがよろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01mgngmgngphp.iniの extension=php_mbstring.dll がコメント
┃┗A01-1FireCrazy>mgngmgngさん 回答ありがとうございます。 早速i
┗A02yakou850とりあえずPHPでマルチバイト関数が使えない状況だと
 ┗A02-1FireCrazy>yakou850さん 回答ありがとうございます。 ># コ
  ┗A02-1-1yakou850コマンドプロンプトから php -i > c:\phpinfo.txt
   ┗A02-1-1-1FireCrazy>yakou850さん 返信ありがとうございます。 テキ
    ┣A02-1-1-1-1yakou850マルチバイト文字列のための関数を動かす場合、 よく
    ┗A02-1-1-1-2mgngmgngいくつかチェックポイントを。 ■Loaded Configurat
     ┗A02-1-1-1-2-1FireCrazy>yakou850さん、mgngmgngさん 返信ありがとうござい

回答一覧

並び替え:

A01
answerermgngmgng [4月2日 14:14]

php.iniの
extension=php_mbstring.dll
がコメントアウトされているような気がするので
確認してみては。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerFireCrazy [4月2日 14:27]

>mgngmgngさん
回答ありがとうございます。

早速iniの中を検索してみましたが、extension=php_mbstring.dll
はコメントアウトにはなっていませんでした。でもそういう時
にもmb関数は使えなくなるんですか。勉強になりました。

この意見に回答する

ツリーへ TOPへ

A02
answereryakou850 [4月2日 14:47]

とりあえずPHPでマルチバイト関数が使えない状況だと思うので
コマンドラインから
  1. php -i
とやってPHPの設定を確認してください。
確認としては
・mbstringの表示があるか
・設定ファイルphp.iniはどこにあるものを参照して、きちんと読み込まれているか
あたりをとりあえず。

# ApacheやXAMPPという文字が出てきていないところをみるとWebサーバでなく
# コマンドラインからの実行と見ていますがあってますか?

この意見に回答する

ツリーへ TOPへ

A02-1
replyerFireCrazy [4月2日 15:14]

>yakou850さん
回答ありがとうございます。

># コマンドラインからの実行と見ていますがあってますか?
あっています。こちらの説明不足で申し訳ありませんでした。

>・mbstringの表示があるか
・設定ファイルphp.iniはどこにあるものを参照して、きちんと読み込まれているか。あたりをとりあえず。

どちらの表示も見つけられませんでした。すいませんが、どういったコードの形で表記されているのか教えていただけませんでしょうか?
コマンドプロンプトで php -iを実行して、そこから「mbstring」と「php.ini」の文字検索を掛けても一件もでてこなかったのもので・・・。

この意見に回答する

ツリーへ TOPへ

A02-1-1
replyeryakou850 [4月2日 15:21]

コマンドプロンプトから
php -i > c:\phpinfo.txt
のようにして設定の内容をテキストファイルに出力します。

その上でそのテキストファイルを開いてみてください。
おそらく最初のほうに「Configuration File (php.ini) Path」という文字列が見つかるのではないでしょうか?

また、その下の行で「Loaded Configuration File」という文字列があれば
特定の設定ファイルをすでに読んでいるはずです。
その中の設定を疑えばmbstringが使えるようになる可能性が高いです。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1
replyerFireCrazy [4月2日 15:46]

>yakou850さん
返信ありがとうございます。

テキストファイルに出力して
「Configuration File (php.ini) Path」と
「Loaded Configuration File」の文を確認しました。
iniファイルへのパスが書いてありました。やはりiniファイルの設定の問題なんでしょうか?先ほどmgngmgngさんからヒントを頂きましたが、それでもエラー解消はできませんでしたが・・。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-1 満足
replyeryakou850 [4月2日 16:00]

マルチバイト文字列のための関数を動かす場合、
よくあるトラブルとして「php.ini」の設定が間違えているという
事例が多いため、それをとりあえず疑っているという現状です。
それだけが原因でないことも多いです。
たとえば、
・php_mbstring.dllを有効にしているが、どこにもファイルがない
・php_mbstring.dllの置き場所がおかしい
なんてこともありえたりします。
なので、わかりやすいところから徐々につぶしていったほうが調査しやすいので
mgngmgngさんも同じphp.iniを設定を疑ったのだと思います。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-2 満足
replyermgngmgng [4月2日 16:21] (最終編集:4月2日 16:24)

いくつかチェックポイントを。

■Loaded Configuration File の php.iniを開いて

■extension_dir に php_mbstring.dll が格納されているディレクトリが設定されているか確認して、
例:extension_dir="C:\php\ext"

■extension=php_mbstring.dll がコメントアウトされてないか確認して

■コマンドプロンプトから
  1. php -m | findstr mbstring
を実行して「mbstring」と表示されればたぶんOK、
表示されなかったら...うーん...何がわるいのでしょうか...


# ちなみに
# php -m は ロードされてるモジュール一覧を出力、
# findstr は Windows でも使える grep みたいなものです。

この意見に回答する

ツリーへ TOPへ

A02-1-1-1-2-1
replyerFireCrazy [4月2日 17:46]

>yakou850さん、mgngmgngさん
返信ありがとうございました。

チェックポイントのチェックをしてみた所、
>■extension_dir に php_mbstring.dll が格納されてい
>るディレクトリが設定されているか確認して

確認したらこうなっていたので↓
extension_dir="C:\php5\ext"

こう直しました↓
extension_dir="C:\php-5.2.9-1-Win32\ext"

そしたらエラーが解消されて関数が使えるようになりました!
php-5.2.9-1-Win32はphp_mbstring.dllが入っているディレクトリです。参照しているフォルダが間違っていたようです。初歩的なミスですいません・・・。

yakou850さん、mgngmgngさん
丁寧な説明、勉強になりました。本当にありがとうございました!

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPのHTML埋め込み記述について
 このエントリーをはてなブックマークに追加 
A
$_POST["data"] == "男" ? $val = "checked" : $val = "" ; の意味は以下と同じです。 if($_POST["data"] == "男"){ $val = "checked; } e...

>>続きを読む

kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)