AsteriskNow で、MS-SQL から、電話をかけてきた相手の名前を調べるPHPを作り直しました

AsteriskNow も6.12となり、入れ直しをしましたので、かけてきた相手の名前を MS-SQL から引いてきて電話番号に表示する PHP を作り直しました。

1)libiconv のダウンロードとコンパイル、インストール

# cd /usr/local/src/
# wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
# cd libiconv-1.14
# ./configure && make && make install

設定ファイルの書き出し

# vi /etc/freetds.conf

内容は [global]の末尾に

        # add batake
        charset = cp932
        client-charset = cp932

ファイルの末尾に

[DBアクセスセット名]
        host = MS-SQLのサーバー名
        port = 1433
        tds version = 9.0
        charset = sjis
        client charset = UTF-8
        language = japanese

3) MS-SQL アクセス試験

# tsql  -S DBアクセスセット名 -U DBユーザー名 -P 'DBパスワード'

結果が

1>

みたいになったら OK なので、

1>exit

で抜ける。

4) PHP の必要モジュールのインストール

# yum install php-mssql php-mbstring
# vi /etc/php.ini

php の [mbstring] の内容

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.substitute_character = none;

5) apache の再起動

# service httpd restart

6) 実行ファイル作成

# cd /var/www/html/
# mkdir phonebook
# cd phonebook/
# vi askname.php

askname.phpファイルの内容は

<?php
ob_start();
$db = mssql_connect ("MS-SQLのサーバー名", "DBユーザー名", "DBパスワード");
$TelNum = $_GET&#91;&#039;tel&#039;&#93;;
$Enc = $_GET&#91;&#039;enc&#039;&#93;;
mssql_select_db("データベース名",$db);
$query = "select * from テーブル名 WHERE replace(電話番号のフィールド名,&#039;-&#039;,&#039;&#039;) LIKE &#039;%".$TelNum."%&#039;";
$res = mssql_query($query,$db);
$i = 0;
$Ans = "";
while($row = mssql_fetch_array($res)){
    if ($i == 0) {
        switch ($Enc) {
                case &#039;SJIS&#039;:
                        $Kana = rtrim($row&#91;&#039;電話番号の主のフリガナのフィールド名&#039;&#93;);
                        break;
                case &#039;sjis&#039;:
                        $Kana = rtrim($row&#91;&#039;電話番号の主のフリガナのフィールド名&#039;&#93;);
                        break;
                case &#039;EUC&#039;:
                        $Kana = mb_convert_encoding(rtrim($row&#91;&#039;電話番号の主のフリガナのフィールド名&#039;&#93;), "EUC","SJIS");
                        break;
                case &#039;euc&#039;:
                        $Kana = mb_convert_encoding(rtrim($row&#91;&#039;電話番号の主のフリガナのフィールド名&#039;&#93;), "EUC","SJIS");
                        break;
                default:
                        $Kana = mb_convert_encoding(rtrim($row&#91;&#039;電話番号の主のフリガナのフィールド名&#039;&#93;), "UTF-8","SJIS");
        }
        $Kana = mb_convert_encoding(rtrim($row&#91;&#039;電話番号の主のフリガナのフィールド名&#039;&#93;), "UTF-8","SJIS");
        $PtID =  rtrim($row&#91;&#039;電話番号の主のID&#039;&#93;);
        $Ans = $PtID.$Kana;
    }
    $i = $i +1;
}
switch ($i) {
    case 0:
        $Ans = $TelNum;
        break;
    case 1:
        break;
    default:
        $Ans = $Ans."etc".strval($i - 1);
}
echo $Ans;
mssql_free_result($res);
mssql_close();
?>;

7) 権限の設定

# chmod u+rx phonebook/*.php
# chown asterisk:asterisk -R phonebook

アクセス方法は、http://asteriskサーバーのアドレス/phonebook/askname.php?tel=電話番号&enc=エンコード方法
( ShiftJIS なら enc=SJIS もしくは enc=sjis、EUCなら enc=EUC もしくは enc= euc &以降をつけないかその他なら UTF-8 )

FreePBX12の CallerID Lookup Souces では、
Source type: HTTP
Path:/phonebook/askname.php
Query:tel=[NUMBER]&enc=SJIS
(SANYO SIP-2100 で SiftJIS で表示させるため)
となりました。

かけてきた相手の ID と名前を表示させているので、名前だけ取れればいいとか、情報を変更する場合、

        switch ($Enc) {
                case 'SJIS':
                        $Kana = rtrim($row['対象のフリガナのフィールド名']);
                        break;
                case 'sjis':
                        $Kana = rtrim($row['対象のフリガナのフィールド名']);
                        break;
                case 'EUC':
                        $Kana = mb_convert_encoding(rtrim($row['対象のフリガナのフィールド名']), "EUC","SJIS");
                        break;
                case 'euc':
                        $Kana = mb_convert_encoding(rtrim($row['対象のフリガナのフィールド名']), "EUC","SJIS");
                        break;
                default:
                        $Kana = mb_convert_encoding(rtrim($row['対象のフリガナのフィールド名']), "UTF-8","SJIS");
        }
        $Kana = mb_convert_encoding(rtrim($row['対象のフリガナのフィールド名']), "UTF-8","SJIS");
        $PtID =  rtrim($row['対象のID']);
        $Ans = $PtID.$Kana;

の部分を変更して、$Ans の中身を変えてください。

コメントを残す

メールアドレスが公開されることはありません。