PHPのローカルの設定についての質問です。

実行するinc内で
$value = mb_convert_encoding($value, "EUC-JP", "SJIS");
とmb_convert_encoding関数を使用しています。

サーバー側では反映されるのですが、ローカル環境で確認すると、
Fatal error: Call to undefined function mb_convert_encoding()
のエラーがでます。

いろいろ調べると
mb_convert_encodingが設定されていないような感じで書かれていましたので、php.iniの設定を替えてみたりしましたが、ダメでした。現在の設定は

output_buffering = Off
magic_quotes_gpc = Off
default_charset = "Shift_JIS"
extension_dir = "C:/php/ext"
extension=php_mbstring.dll
extension=php_mysql.dll
mbstring.language = Japanese
mbstring.internal_encoding = SJIS
mbstring.http_input = auto
mbstring.http_output = SJIS
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none

としています。
PHPinfo.phpのmbstringは

Multibyte Support enabled
Multibyte string engine libmbfl
HTTP input encoding translation enabled
Multibyte (japanese) regex support enabled
Multibyte regex (oniguruma) version 3.7.0

となっています。どこを直せばエラーがでなくなるでしょう…
PHPのバージョンはPHP Version 5.0.4です。
宜しくお願いします。

回答の条件
  • 1人2回まで
  • 登録:2007/03/20 17:52:50
  • 終了:2007/03/27 17:55:03

回答(3件)

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912007/03/20 18:23:03

ポイント27pt

extention の設定はどうなっていますか?

Windows なら

extension=php_mbstring.dll
(Linux ならmbstring.so ?)

が関係していると思います。

http://www.phppro.jp/phpmanual/php/function.mb-convert-encoding....

http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1310732...

id:praide

下記の通りです。

すいません。

2007/03/20 19:01:51
id:Mook No.2

Mook回答回数1312ベストアンサー獲得回数3912007/03/20 18:28:19

ポイント27pt

失礼しました。

先の回答に関する部分はご存知でしたね。

開封ポイントはお返しします。


サービス(IIS or Apatache)の再起動はされているでしょうか。

起動に失敗しているようでしたら、EventLog に何か出ていませんか?


そのあたりを、記載いただくと原因がわかるかと思います。


些細な確認は、コメントを有効にしていただければそちらで回答します。

id:praide

アパッチを再起動すると、Warning:Module 'mbstring'already loadedと出てきます。

これでしょうか?

2007/03/20 19:04:43
id:Yota No.3

Yota回答回数453ベストアンサー獲得回数282007/03/21 09:05:55

ポイント26pt

1.<?php phpinfo(); ?>のファイルをブラウザで見たとき

Configuration File (php.ini) Path

は今編集しているphp.iniをさしていますか。

2.php.iniが二つあるということはないですか。

3.上のファイルでphpinfo();の前に、echo mb_internal_encoding();

と書いたらエラーが出ますか。

id:praide

1.の階層はあっていました。

2.も問題ありませんでした。

3.もエラーは出ず、SJIS と表示されます。

2007/03/22 13:44:49
  • id:Yota
    mb_internal_encoding()でエラーが出ないのに、mb_convert_encoding()はCall to undefined functionということですか。
  • id:praide
    はい。普通はありえないのでしょうか?
  • id:Yota
    こんなのはどうですか。
    print_r(mb_list_encodings());
  • id:praide
    長いですが
    Array ( [0] => pass [1] => auto [2] => wchar [3] => byte2be [4] => byte2le [5] => byte4be [6] => byte4le [7] => BASE64 [8] => UUENCODE [9] => HTML-ENTITIES [10] => Quoted-Printable [11] => 7bit [12] => 8bit [13] => UCS-4 [14] => UCS-4BE [15] => UCS-4LE [16] => UCS-2 [17] => UCS-2BE [18] => UCS-2LE [19] => UTF-32 [20] => UTF-32BE [21] => UTF-32LE [22] => UTF-16 [23] => UTF-16BE [24] => UTF-16LE [25] => UTF-8 [26] => UTF-7 [27] => UTF7-IMAP [28] => ASCII [29] => EUC-JP [30] => SJIS [31] => eucJP-win [32] => SJIS-win [33] => JIS [34] => ISO-2022-JP [35] => Windows-1252 [36] => ISO-8859-1 [37] => ISO-8859-2 [38] => ISO-8859-3 [39] => ISO-8859-4 [40] => ISO-8859-5 [41] => ISO-8859-6 [42] => ISO-8859-7 [43] => ISO-8859-8 [44] => ISO-8859-9 [45] => ISO-8859-10 [46] => ISO-8859-13 [47] => ISO-8859-14 [48] => ISO-8859-15 [49] => ISO-8859-16 [50] => EUC-CN [51] => CP936 [52] => HZ [53] => EUC-TW [54] => BIG-5 [55] => EUC-KR [56] => UHC [57] => ISO-2022-KR [58] => Windows-1251 [59] => CP866 [60] => KOI8-R )
    こんな風にでてきました!?
  • id:Yota
    php_mbstring.dllがダウンロードされていなければ、mb_の関数は全滅するはず。
    わからない。
    PHPをバージョンアップしてみて。
  • id:Mook
    なかなか怪しいところが見当たらないですね。

    実際のエラーが発生している部分のコードを(できれば前後数行)をコピー&ペーストで掲載できませんか?
  • id:praide
    この辺りなのですが
    csvファイルから読み込んだものを配列にして
    SJISからEUCに変換して
    全角から半角に変換
    またEUCからSJISに変換しています。

    foreach($input as $value){
    $value=trim($value);
    $value = mb_convert_encoding($value, "EUC-JP", "SJIS");
    $value = mb_convert_kana($value, "sk");
    $value = mb_convert_encoding($value, "SJIS", "EUC-JP");
    list($event_area,$event_gyoshu,$event_name,$event_url,$tickets_url,$event_tel,$event_wari,$event_judge)=split(',',$value);

    二回も変換しているからでしょうか?
  • id:Mook
    確認なのですが、同じコードでサーバでは動いているんですよね。
    わかりませんねぇ。

    あとはオーソドックスに、データを表示しながら動作を確認してみては、どうでしょうか。

    foreach($input as $value){
    print "DEBUG STEP 1 IN DATA :[{$value}]<br>\n";
    $value=trim($value);
    print "DEBUG STEP 2 AFTER TRIM :[{$value}]<br>\n";
    $value = mb_convert_encoding($value, "EUC-JP", "SJIS");
    print "DEBUG STEP 3 ENCODE(EUC) :[{$value}]<br>\n";
    $value = mb_convert_kana($value, "sk");
    print "DEBUG STEP 4 CONVERT(sk) :[{$value}]<br>\n";
    $value = mb_convert_encoding($value, "SJIS", "EUC-JP");
    print "DEBUG STEP 5 ENCODE(SJIS):[{$value}]<br>\n";
    }

    それからエラーが発生した行が表示されていると思うのですが、最初のmb_convert_encoding 関数で出ているのでしょうか。
  • id:praide
    長らくほったらかしにしてしまい、すいません。
    文字コードの問題解決しました!
    php.iniの中でextension=php_mbstring.dllを
    解除したら、文字コードについてのエラーは消えました。
    しかし、新たなエラー

    shuffle() expects parameter 1 to be array, null given in

    Invalid argument supplied for foreach() in
    が出てきてしまいました…
    なかなかPHP手強いです…
    とりあえずこの質問はこれで終了とさせて頂きます。
    回答頂いた皆さん本当にありがとうございました!!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません