PHP関連のメモ

システムに関するメモ

検索時の置換

2009-06-22 20:06:20 | PHP関数
検索時に文字列を置換したいときに使用

mb_convert_kana( 文字列, 変換オプション, 文字エンコーディング );

$_POST["keyword"] = mb_convert_kana($_POST["keyword"],"rnKV", "UTF-8");


r = 全角英文字を半角英文字に変換する
n = 全角数字を半角数字に変換する
K = 半角カタカナを全角カタカナに変換する
V = 濁点つきの文字を1文字に変換する (K、H と共に利用する)

※「V」を使用しないと濁点がへんなことになる



3G対応形態判別

2009-06-12 12:44:46 | 携帯関連
ユーザーエージェント携帯判別

■NTT DoCoMo
MOVA ブラウザフォン
DoCoMo/1.0で始まる。
DoCoMo/1.0/N505iS/c20/TB/W20H10
FOMA (XHTML)
DoCoMo/2.0で始まる。
DoCoMo/2.0 F901iC(c100;TB;W23H12)


■SoftBank

※※※
SoftBankのUIDはSSL(直リンのみ)では取得できないらしい。。。
なので
<回避方法>
1. 非SSLのサーバからリンクを張る。
2. 非SSLのサーバからリダイレクトする。

など、SSL領域ではDocomo と同じ処置が必要だ。


1G, 2G
J-PHONEで始まる。
J-PHONE/5.0/V801SH/SN000000000 SH/0005aa Profile /MIDP-1.0 Configuration/CLDC-1.0 Ext-Profile/JSCL-1.1.0

3G (XHTML)
MOT-C980かMOT-V980で始まる。
MOT-C980/80.2F.2E. MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1
MOT-V980/80.2F.2E. MIB/2.2.1 Profile/MIDP-2.0 Configuration/CLDC-1.1

3G (XHTML)
Vodafoneで始まるが、AUと同じUP.Browserが含まれる場合がある。
Vodafone/1.0/V802SH/SHJ000 Browser/UP.Browser/7.0.2.1 Profile
/MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Profile/JSCL-1.2.2

3G (XHTML)
SoftBankで始まる。
SoftBank/1.0/910T/TJ001/SN Browser/NetFront/3.3 Profile
/MIDP-2.0 Configuration/CLDC-1.1


■AU
WAP1 (HDML)
UP.Browserが含まれる。
UP.Browser/3.04-CA14 UP.Link/3.4.5.8
SIE-M65/12 UP.Browser/7.0.0.1.c.3 (GUI) MMP/2.0 Profile
/MIDP-2.0 Configuration/CLDC-1.1

WAP2 (XHTML)
KDDI-で始まる。
KDDI-CA23 UP.Browser/5.2.0.1.126 (GUI) MMP/2.0


■WILLCOM
EDGE LINK
PDXGWで始まる。
PDXGW/1.0 (TX=8;TY=7;GX=96;GY=84;C=C256;G=BF;GI=2)

Air EDGE PHONE
DDIPOCKETが含まれる。
Mozilla/3.0 (DDIPOCKET;KYOCERA/AH-K3001V/1.5.2.8.000/0.1/C100) Opera 7.0
Mozilla/3.0 (DDIPOCKET;JRC/AH-J3001V,AH-J3002V/1.0/0100/c50) CNF/2.0

WILLCOM
WILLCOMが含まれる。
Mozilla/3.0(WILLCOM;SANYO/WX310SA/2;1/1/C128) NetFront/3.3
Mozilla/3.0(WILLCOM;KYOCERA/WX300K/1;1.0.2.8.000000/0.1/C100) Opera/7.0



まとめ
PHP

$agent = $_SERVER['HTTP_USER_AGENT'];

if (preg_match('{^DoCoMo/[12].0}', $agent)) {
return 'd';// docomo
} else if (preg_match('{^(J-PHONE|Vodafone|MOT-[CV]980|SoftBank)/}', $agent)) {
return 's';// softbank
} else if (preg_match('/^KDDI-|UP.Browser/', $agent)) {
return 'a';// au
} else if (preg_match('{^PDXGW/|DDIPOCKET;|WILLCOM;}',
$agent)) {
return 'w';// willcom
} else {
return 'p';// pc
}

更に詳しい端末情報が欲しい場合は個体識別番号(吐かない端末あり)を解析すれば取得できます。また、PDAの様なモバイルPCを判別したい場合はSHやSANYO、KYOCERAといった社名から判断できる場合があります。

参考資料
DoCoMo - ユーザーエージェント一覧
SoftBank - ユーザーエージェント情報
AU - 技術情報
WILLCOM - ホームページ作成方法
携帯サイト開発用品
iモードHTMLシミュレータ
i-mode用コンテンツ動作テスター
ヘッダの確認や、サイズオーバー等の携帯特有の警告も確認できます。
FLASHのテストも可能。
Openwave SDK
EZweb用コンテンツ動作テスター
WAP2.0対応ブラウザとHDMLブラウザの切り替え機能付き。
User Agent Switcher Extension
Mozilla Firefoxでユーザーエージェントを偽装して携帯サイトの閲覧が可能に。

PostgreSQLのチューニング

2009-06-12 11:15:45 | テータベース
PostgreSQLのチューニング

PostgreSQLは最適なパフォーマンスが出るように自動的に調整されるため、特別なチューニングテクニックは必須ではありませんが、最大限にパフォーマンスを引き出したい場合にはpostgresql.confで指定している値を調整することによりチューニングが可能です。また、 PostgreSQLのパフォーマンス向上のためには定期的にVACUUMコマンドを実行することをお奨めします。

■VACUUMコマンドを実行する
VACUUMコマンドはPostgreSQLデータベースの掃除と解析をおこなうコマンドです。
定期的にVACUUMコマンドを実行するとデータベースの問い合わせのパフォーマンスが向上します。
VACUUMコマンドによる処理はテーブルが大きい場合は時間がかかりますので、あまりアクセスのない時間帯におこなうとよいでしょう。

●VACUUMコマンドの文法

vacuumdb [connection-options...] [[-d] dbname] [--full | -f] [--verbose | -v] [--analyze | -z] [--table 'table [( column [,...] )]']

VACUUMコマンドの実行例
testというデータベースを掃除するには、下記のようにコマンドを実行します。

$ vacuumdb test


実行後、下記のメッセージが戻ればVACUUM処理が完了しています。

VACUUM


■共有バッファを増やす場合
共有バッファはデータベースをアクセスする際のキャッシュとして使われます。
PostgreSQLを動かすサーバーの搭載メモリに余裕のあるシステムでは、メモリ内に全てのデータベースを展開するとパフォーマンスが向上します。各バッファは8Kバイトですので「共有バッファ」は次の計算で求められます

「共有バッファ」= ((空きメモリの合計) と (データベースサイズ + 512K) の少ない方)) / 8192

「共有バッファ」を増やす場合はpostgresql.conf内の「shared_buffers」で指定する値を増やします。

例)
shared_buffers = 1024

■PostgreSQLへの接続数を増やす場合
PostgreSQLの同時接続ユーザー数の上限はpostgresql.conf内の「max_connections」で指定します。
同時接続ユーザー数を増やした場合は「同時接続ユーザー数 * 2」以上に共有メモリを増やしてください。

例)
max_connections = 64

■ソートバッファの値を増やす場合
ソート処理はSQLのORDER BYを指定した場合だけでなく、テーブルの結合の際にもおこなわれますので、ソートバッファを大きくすることでパフォーマンスの向上が期待できます。
ソートバッファの値を増やす場合はpostgresql.conf内の「sort_mem」で指定する値を増やします。

例)
sort_mem = 4096

■キャッシュサイズを増やす場合
キャッシュサイズ値で共有バッファが割り当てられたときに利用できるメモリの量を設定します。
キャッシュサイズを増やす場合はpostgresql.conf内の「effective_cache_size」でキャッシュサイズを指定している値を増やします。

例)
effective_cache_size = 1000

■トランザクションログ
「トランザクションログが無くなっている(running out of transaction logs)」というメッセージが出力される場合はpostgresql.conf内の「al_files」と「wal_ buffers」で指定している値を増やします。

例)
wal_buffers = 8
wal_files = 4

au文字コード

2009-06-05 15:43:17 | 携帯関連
EZwebでは文字コードの指定は必須です。
また、EZwebでサポートする文字コードはShift-JISです。
文字コードの指定が無い場合、Shift-JIS以外の文字コードを指定した場合には、コンテンツが正しく表示されない (文字化けする) 場合がありますのご注意ください。

■文字コードの指定方法 (例)

HTTPレスポンスヘッダによる指定

1. WEBサーバのMIME-TYPEによる指定

Apacheの場合
AddType text/html; charset=Shift_JIS .html
AddType text/x-hdml; charset=Shift_JIS .hdml

※WEBサーバの種類によって設定は異なります。
詳細はWEBサーバの取扱説明書または販売会社にお問い合わせください。
※Encodingヘッダによる文字コード指定はRFC規定外のため2002年9月より非サポートとしています。

2.CGI等のヘッダ出力による指定
perlの場合
print "Content-type: text/html; charset=Shift_JISn";
print "Content-type: text/x-hdml; charset=Shift_JISn";

コンテンツ記述による指定 (HTMLコンテンツのみ)

3.<mata>タグでの指定
<meta http-equiv="Content-type" content="text/html; charset=Shift_JIS">


MySQLでSELECT結果を垂直に表示する方法

2009-06-04 15:41:42 | サーバ関連
MySQLでSELECT結果を垂直に表示する方法です。
基本中の基本ですが、うっかりいつも忘れてしまいます。メモ代わりです。

ターミナルでMySQLに接続した場合、テーブルの情報がたくさんあると、単純にSELECTすると、情報の波に飲まれてしまいます。

そこで、レコードごとに垂直に表示する方法です。


mysql> SELECT * FROM TABLE_NAME \G



最後に「\G」を付けます。これだけです。簡単です。覚えましょう。
ただ、「\g」ではNGです。「\G」です。大文字小文字に気をつけましょう。