

PHP でメール送信機能付きのお問い合わせフォームを作っております。

[![エラー／ブラウザ画面](https://i.stack.imgur.com/9egDP.png)](https://i.stack.imgur.com/9egDP.png)

事象としては PHP のモジュール拡張機能である `mb_string` が読み込めていないことだと思いますが、未だに解決できません。  
原因とその解決法を教えてください。

以下のコマンドで `mb_string` はインストール済みです。

[code]

    sudo yum --enablerepo=remi install -y php php-devel php-mysql php-mbstring php-gd
    
[/code]

※環境：

  * mac
  * PHP 5.4.45
  * Vargant

で動かしています。

* * *

実際のコードは以下に転記しておきます。  
（個人情報の関係上、送信先と送信元は空白指定です）

[code]

    <?php
    
    mb_language("ja");
    mb_internal_encoding('UTF-8');
    
    $name = $_POST['name'];
    $title = $_POST['title'];
    $address = $_POST['address'];
    $message = $_POST['message'];
    
    //初期化
    $sTo          = '';
    $sFromMail    = '';
    $sSubject     = '';
    $sMessage     = '';
    $sHeaders     = '';
    
    //送信先
    $sTo          = '';
    //送信元
    $sFromMail    = '';
    //題
    $sSubject     = '【件名】メール送信テスト';
    //ヘッダー
    $sHeaders     = "From: {$sFromMail}\r\n";
    //$sHeaders .= 'Return-Path: yamapoon24@gmail.com';
    //本文
    $sMessage .=
    "\n"
    ."<p>お名前：<?php echo htmlspecialchars($name, ENT_QUOTES, 'utf-8'); ?></p>"
    ."<p>件名：<?php echo htmlspecialchars($title, ENT_QUOTES, 'utf-8'); ?></p>"
    ."<p>メールアドレス：<?php echo htmlspecialchars($address, ENT_QUOTES, 'utf-8'); ?></p>"
    ."<p>本文：<?php echo htmlspecialchars($message, ENT_QUOTES, 'utf-8'); ?><br />";
    
    //送信処理
    if(mb_send_mail($sTo, $sSubject, $sMessage, $sHeaders)){
        echo 'メール送信に成功致しました。<br/>';
    }else{
        echo 'メール送信に失敗致しました。<br/>';
    }
    
    ?>
    
    <!DOCTYPE html>
    <html>
    <head>
      <meta charset="utf-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <title>[課題]PHP基礎編(2)</title>
      <link rel="stylesheet" href="">
    </head>
    <body>
    <h1>お問い合わせいただき、ありがとうございました！</h1>
    </body>
    </html>
    
[/code]

`/etc/php.d/mbstring.ini` の中身:

[code]

    ; language for internal character representation.
    ; http://php.net/mbstring.language
    mbstring.language = Japanese
    
    ; internal/script encoding.
    ; Some encoding cannot work as internal encoding.
    ; (e.g. SJIS, BIG5, ISO-2022-*)
    ; http://php.net/mbstring.internal-encoding
    mbstring.internal_encoding = UTF-8
    
    ; http input encoding.
    ; http://php.net/mbstring.http-input
    mbstring.http_input = pass
    
    ; http output encoding. mb_output_handler must be
    ; registered as output buffer to function
    ; http://php.net/mbstring.http-output
    ;mbstring.http_output = pass
    
    ; enable automatic encoding translation according to
    ; mbstring.internal_encoding setting. Input chars are
    ; converted to internal encoding by setting this to On.
    ; Note: Do _not_ use automatic encoding translation for
    ;       portable libs/applications.
    ; http://php.net/mbstring.encoding-translation
    mbstring.encoding_translation = Off
    
    ; automatic encoding detection order.
    ; auto means
    ; http://php.net/mbstring.detect-order
    mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
    
    ; substitute_character used when character cannot be converted
    ; one from another
    ; http://php.net/mbstring.substitute-character
    mbstring.substitute_character = none;
    
    ; overload(replace) single byte functions by mbstring functions.
    ; mail(), ereg(), etc are overloaded by mb_send_mail(), mb_ereg(),
    ; etc. Possible values are 0,1,2,4 or combination of them.
    ; For example, 7 for overload everything.
    ; 0: No overload
    ; 1: Overload mail() function
    ; 2: Overload str*() functions
    ; 4: Overload ereg*() functions
    ; http://php.net/mbstring.func-overload
    mbstring.func_overload = 0
    
    ; enable strict encoding detection.
    mbstring.strict_detection = Off
    
    ; This directive specifies the regex pattern of content types for which mb_output_handler()
    ; is activated.
    ; Default: mbstring.http_output_conv_mimetype=^(text/|application/xhtml\+xml)
    ;mbstring.http_output_conv_mimetype=
    
    <mbstring.iniの中身>
    
    ; Enable mbstring extension module
    extension=mbstring.so
    
[/code]


CC BY-SA 4.0
2015-10-18T16:02:49.617
17784
2019-06-03T01:21:56.543
2019-06-01T18:59:43.537
32986
7176
question
php
mb_languageなどのmb関数が読み込めない


※解決済みのようなのでコメントより抜粋

> `php -i | grep mbstring`の出力結果はどうなりますか？  
>  `yum`を使われているところから見て`centos`だと思いますが、  
>  `/etc/php.d/mbstring.ini`は存在していますか？  
>  holywise 15年10月18日 21:07
>
> 「/etc/php.d/mbstring.ini,」が表示されます！ 既に`php-mbstring`はインストール済みです。  
>  Daiki Yamada 15年10月19日 11:37
>
> その1行しか出ていないのであれば、`mbstring`は正常に読み込まれていないものと思われます。  
>  `/etc/php.ini`の`mbstring`関係の設定および、`/etc/php.d/mbsring.ini`の内容を提示できますか？  
>  holywise 15年10月19日 12:07

上記によりmb系のモジュールが正常に読み込まれていないことが発覚。

> `extension=mbstring.so`を絶対パスで指定するとどうなるでしょうか？  
>  `extension=/usr/lib64/php/modules/mbstring.so`(パスが違っていたら適宜変更して下さい)  
>  user9156 15年10月19日 13:14
>
> 絶対パスでいけました！でもなぜでしょうか。  
>  Daiki Yamada 15年10月19日 16:13
>
> `php.ini`の`extension_dir`の設定を確認してみて下さい。  
>  本来のディレクトリ以外のパスに設定されているのかもしれません。 user9156 15年10月19日 22:56

拡張モジュールの読込先が本来のディレクトリ以外を参照しているため、  
モジュールのインストール先との齟齬でmbモジュールが読み込めなかったようです。


CC BY-SA 4.0
2019-06-03T01:21:56.543
55463
2019-06-03T01:21:56.543
7676
17784
answer