mod_chxjはオープンソースの携帯向けコンテンツ変換Apache2.x用モジュールであり、CHTML(DoCoMo i-Mode用CHTML5.0)で記述された文書や通常のHTMLで記述された文書を、アクセスに来た端末のUser-Agentヘッダを見て、それぞれの端末にあった形式に変換します。HTML文書に限らず、画像(jpg、gif、png)、絵文字についても、定義ファイルに従ってそれぞれのキャリアにあった絵文字に変換します。Cookie非対応端末、Refer非対応端末のために、Set-Cookie、CookieヘッダやRefererヘッダをシミュレートすることもできます。
mod_chxjをインストールする前に、下記のものを用意する必要があります。
mod_chxjはこちらからダウンロードすることができます。
以下にmod_chxjインストール手順を示します。
Configureスクリプトを生成します
$ ./buildconf.sh
Configure
$ ./configure
$ make
$ make install
データの設置etcディレクトリは以下のdevice_data.xmlとemoji.xmlをApacheからアクセスできるところに配置します。
以下、/etc/apache2/chxjディレクトリにchxj用設定ファイルを用意する場合
$ mkdir -p /etc/apache2/chxj $ cp etc/device_data.xml /etc/apache2/chxj $ cp etc/emoji.xml /etc/apache2/chxj
mod_chxjをコンパイルするにはconfigureを行う必要があります。以下にconfigureのオプションを記します。
通常指定する必要はありません。configureでApacheのヘッダファイルの場所が検知できなかった場合や、任意のApacheヘッダファイルを使用したい場合に指定します。
$ ./configure --with-apache-header=/usr/include/apache2
上記は/usr/include/apache2以下にApacheのヘッダファイルがある場合の例です。
通常指定する必要はありません。configureでapxsを検知できなかった場合や、任意のapxsプログラムを指定したい場合に指定します。
$ ./configure --with-apxs=/usr/local/apache2/bin/apxs2
上記は/usr/local/apache2/bin/apxs2を使用するようにapxsに指定しています。
通常指定する必要はありません。configureでapr-configを検知できなかった場合や、任意のapr-configプログラムを指定したい場合に指定します。
$ ./configure --with-apr-config=/usr/local/apache2/bin/apr-1-config
上記は/usr/local/apache2/bin/apr-1-configを使用するように指定しています。
通常指定する必要はありません。configureでapu-configを検知できなかった場合や、任意のapu-configプログラムを指定したい場合に指定します。
$ ./configure --with-apu-config=/usr/local/apache2/bin/apu-1-config
上記は/usr/local/apache2/bin/apu-1-configを使用するように指定しています。
Cookieシミュレート機能を使用する際、保存先をデフォルトのDBMでは無く、MySQLに保存するようにします。DefaultのDBMで良い場合や、Cookieシミュレート機能を使用しない場合は指定する必要はありません。別途MySQLサーバを用意する必要があります。また、本オプションを指定した場合は、--with-mysql-header、--with-mysql-lib-dirも指定します。これはMySQLのヘッダとライブラリが必要なことを意味します。使用するMySQLのライブラリは今のところlibmysqlclient_r.soのみです。
$ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql \ --with-mysql-lib-dir=/usr/lib
上記は、/usr/include/mysql以下にmysql用のヘッダがあり、/usr/lib以下にlibmysqlclient_r.soがある場合の例です。
--enable-mysql-cookieを指定した場合は必須です。MySQLのヘッダファイルの場所を指定します。
$ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql \ --with-mysql-lib-dir=/usr/lib
--enable-mysql-cookieを指定した場合は必須です。MySQLのライブラリ、libmysqlclient_r.soの設置されているディレクトリを指定します。
$ ./configure --enable-mysql-cookie --with-mysql-header=/usr/include/mysql \ --with-mysql-lib-dir=/usr/lib
Cookieシミュレート機能を使用する際、保存先をデフォルトのDBMでは無く、memcachedに保存するようにします。DefaultのDBMで良い場合や、Cookieシミュレート機能を使用しない場合は指定する必要はありません。別途memcachedを用意する必要があります。また、本オプションを指定した場合は、--with-memcached-header、--with-memcached-lib-dirも指定します。これはlibmemcachedのヘッダとライブラリが必要なことを意味します。
$ ./configure --enable-memcache-cookie \ --with-memcached-header=/usr/include/libmemcached \ --with-memcached-lib-dir=/usr/lib
上記は、/usr/include/libmemcached以下にlibmemcached用のヘッダがあり、/usr/lib以下にlibmemcached.soがある場合の例です。
--enable-memcache-cookieを指定した場合は必須です。libmemcachedのヘッダファイルの場所を指定します。
$ ./configure --enable-memcache-cookie \ --with-memcached-header=/usr/include/libmemcached \ --with-memcached-lib-dir=/usr/lib
--enable-memcache-cookieを指定した場合は必須です。libmemcachedのライブラリ、libmemcached.soの設置されているディレクトリを指定します。
$ ./configure --enable-memcache-cookie \ --with-memcached-header=/usr/include/libmemcached \ --with-memcached-lib-dir=/usr/lib
以下はmod_chxjが/usr/lib/apache2/modulesディレクトリ配下に設置されたものとしています
例として、Locationが"/chxj"以下のものは全て変換する場合を説明します。
#==================================================================================== # モジュールをApache2.xにロード #==================================================================================== LoadModule chxj_module /usr/lib/apache2/modules/mod_chxj.so #==================================================================================== # デバイスデータファイルの設定 #==================================================================================== ChxjLoadDeviceData /etc/apache2/chxj/device_data.xml #==================================================================================== # 絵文字データファイルの設定 #==================================================================================== ChxjLoadEmojiData /etc/apache2/chxj/emoji.xml #==================================================================================== # 変換エンジン動作指示命令 # ChxjConvRule ==> ディレクティブ # "^/chxj.+$" ==> Perl互換のURIパターン # EngineOn ==> 変換エンジンを動作させる指示 # NONE ==> サーバ側の文字コード。(NONEを指定した場合は文字コード変換しない) #==================================================================================== ChxjConvertRule "^/chxj.+$" "EngineOn" "NONE"
#==================================================================================== # モジュールをApache2.xにロード #==================================================================================== LoadModule chxj_module /usr/lib/apache2/modules/mod_chxj.so #==================================================================================== # デバイスデータの設定 #==================================================================================== ChxjLoadDeviceData /etc/apache2/chxj/device_data.xml #==================================================================================== # 絵文字データの設定 #==================================================================================== ChxjLoadEmojiData /etc/apache2/chxj/emoji.xml #==================================================================================== # 変換エンジン動作指示命令 # ChxjConvRule ==> ディレクティブ # "^/chxj.+$" ==> Perl互換のURIパターン # EngineOn ==> 変換エンジンを動作させる指示。動作させたく無い場合は"EngineOff" # EUC-JP ==> サーバ側の文字コード。(NONEを指定した場合は文字コード変換しない) # EUC-JPからCP932に文字コード変換します。 #==================================================================================== ChxjConvertRule "^/chxj.+$" "EngineOn" "EUC-JP"
#==================================================================================== # モジュールをApache2.xにロード #==================================================================================== LoadModule chxj_module /usr/lib/apache2/modules/mod_chxj.so #==================================================================================== # デバイスデータの設定 #==================================================================================== ChxjLoadDeviceData /etc/apache2/chxj/device_data.xml #==================================================================================== # 絵文字データの設定 #==================================================================================== ChxjLoadEmojiData /etc/apache2/chxj/emoji.xml #==================================================================================== # 変換エンジン動作指示命令 #==================================================================================== #==================================================================================== # bwikiの設定をします。bwikiではどうもxoopsヘッダの文字コードとbwiki内での携帯スキン # の文字コードが一致していないようなので、bwiki内で文字コードを変換させないように # 修正後、以下のルールを記述します。 # # ChxjConvRule ディレクティブ # "^/modules/bwiki.+$" このルールを適用したいURIパターン # "EngineOn" 変換エンジンを有効にします。 # "EUC-JP" 出力時にEUC-JPからCP932に変換させます。 # "PC" 変換元HTMLはPCサイト用HTMLです。 # "DoCoMo/1.0/D501i" DoCoMo端末としてbwikiにアクセスさせます。 # #==================================================================================== ChxjConvertRule "^/modules/bwiki.+$" "EngineOn" "EUC-JP" "PC" \ "DoCoMo/1.0/D501i" #==================================================================================== # wordpressの設定をします。 # # ChxjConvRule ディレクティブ # "^/modules/wordpress.+$" このルールを適用したいURIパターン # "EngineOn" 変換エンジンを有効にします。 # "NONE" 出力時に文字コード変換をさせません。 # "NONE" 変換元HTMLはPCサイト用HTMLではありません。 # "DoCoMo/1.0/D501i" DoCoMo端末としてwordpressにアクセスさせます。 # #==================================================================================== ChxjConvertRule "^/modules/wordpress/.*$" "EngineOn" "NONE" "PC" \ "DoCoMo/1.0/D501i" #==================================================================================== # その他の設定をします。 # # ChxjConvRule ディレクティブ # "^/.+$" このルールを適用したいURIパターン # "EngineOn" 変換エンジンを有効にします。 # "EUC-JP" 出力時にEUC-JPからCP932に文字コード変換をさせます。 # #==================================================================================== ChxjConvertRule "^/.+$" "EngineOn" "EUC-JP" <Location /> ChxjImageEngine On AllowOverride All </Location>
httpd.confに以下を追加します。下記は、URIが/imgで始まる全ての画像に対して動作するようmod_chxjに指示しています。
<Location /img> ChxjImageEngine On ChxjImageCacheDir /tmp ChxjImageCopyright "A.Konno" </Location>
上記の説明を以下に示します。
ChxjImageEngine
mod_chxjの画像変換ハンドラを起動するよう指示しています。DefaultはOff
ChxjImageCacheDir
mod_chxj画像変換ハンドラが使用する変換後の画像をおいておくディレクトリを指定します。デフォルトは/tmp。
ChxjImageCacheDir /tmp
mod_chxjに画像変換キャッシュとして/tmpを使用するよう指示します。
ChxjImageCacheLimit
mod_chxj画像変換ハンドラが使用する変換後の画像をおいておくディレクトリの許容量を指定します。単位はbyte。
ChxjImageCacheLimit 1024
mod_chxjに画像変換キャッシュ最大サイズとして1kbyteと指定。※このとき変換結果が1kbyte以上あるような場合にはINTERNAL_SERVER_ERRORを返します。十分な領域を確保するか、画像サイズを小さくしてください。
ChxjImageCopyright
mod_chxjの画像変換ハンドラに、転送禁止設定を行うよう指示します。パラメータとして任意の文字列をとります。ChxjImageCopyrightディレクティブで指定された文字列は、それぞれのイメージのコメント部に埋め込まれます。
ChxjImageCopyright "A.Konno"
mod_chxjに転送禁止設定を行うよう指示しています。変換後イメージのコメント部分には、キャリア毎に以下の文字列を埋め込みます。
AU の場合
kddi_copyright=on,A.Konno
DoCoMoの場合
copy="NO",A.Konno
SoftBank/Vodafoneの場合は、レスポンスヘッダに
x-jphone-copyright:no-transfer
を埋め込みます。(4)
httpd.confに以下を追加します。下記は、URIが/chxjで始まる全てのコンテンツに対して動作するようmod_chxjに指示しています。サーバ側はEUC-JPであった場合の例です。mod_chxjによってSJISに変換するように指示しています。サーバ側がShift_JISで無い場合は、Shift_JISコードの10進参照文字列表記を記述することによってShift_JISコードの絵文字2バイトコードに変換しクライアントへ返します。
ChxjConvRule "^/chxj.+$" "EngineOn" "EUC-JP"
上記の説明を以下に示します。
ChxjConvertRule
サーバサイドの文字コードを指定します。ここに、EUC-JPと指定してあった場合は、EUC-JPからCP932に変換後、クライアントに出力されます。省略した場合はNONE
ChxjLoadDeviceData /etc/apache2/device.xml
ChxjLoadEmojiData /etc/apache2/chxj/emoji.xml
ChxjImageEngine On
ChxjImageCacheDir /tmp
ChxjImageCacheLimit 1048576
ChxjImageCopyright "chosakuken jyoho"
第1パラメータ | URIを評価するPerl互換の正規表現を指定します |
第2パラメータ | HTML変換エンジンのOn|Offを指定します。Onの場合は"EngineOn"。Offの場合は"EngineOff"を指定します。"EngineOn|EngineOff"の他に"CookieOn|CookieOff"を指定することもできます。複数指定する場合は","で区切って指定します。 |
第3パラメータ | 文字コードを指定します。ここで指定した文字コードから"CP932"に変換します。指定できる文字コードはiconv -lコマンドによって確認することができます。変換しなくて良い場合はNONEを指定してください。 |
第4パラメータ | 省略した場合は、携帯ページからの変換を意味します。PC用ページからの変換を行う場合は"PC"を第四パラメータに指定します。 |
第5パラメータ | サーバサイドアプリケーションに渡すUser-Agentを指定します。例えば、wordpress等のようにCHTMLを出力するアプリケーションがある場合は、"DoCoMo/1.0/N501i"等適当なUser-Agentを指定することによって、アプリケーションにCHTMLを出力するように指示することができます。ここで指定したUser-AgentはHTML出力時には評価されません。 |
ChxjConvertRule "^/chxj.+$/" EngineOn EUC-JP
ChxjCookieDir
クッキー保存先をdbmにする場合(デフォルト)指定します。クッキーの内容を保存するディレクトリを指定します。指定しない場合は/tmpに保存されます。
<Location /> ChxjCookieDir /tmp </Location>
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieTimeout
クッキーを使用する場合に指定します。クッキーの保持期間を秒単位で指定します。指定しない場合は、1800秒でクッキーデータを破棄します。
<Location /> ChxjCookieTimeout 10 </Location>
詳細は「Cookieシミュレート機能」の項を参照ください。
値 | 意味 | 指定例 |
"dbm" | dbmを選択します。 | ChxjCookieStoreType "dbm" |
"mysql" | mysqlを選択します。有効にするにはconfigure時にMYSQL COOKIE機能を有効にする必要があります | ChxjCookieStoreType "mysql" |
"memcache" | memcacheを選択します。有効にするにはconfigure時にMEMCACHE COOKIE機能を有効にする必要があります | ChxjCookieStoreType "memcache" |
ChxjCookieMysqlHost
MySQLサーバの動作するホストを指定します。
ChxjCookieMysqlHost "localhost"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlPort
MySQLサーバのポート番号を指定します。
ChxjCookieMysqlPort 3306
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlDatabase
MySQLサーバのデータベース名を指定します。
ChxjCookieMysqlDatabase "test_db"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlUsername
MySQLサーバに接続する際に使用するユーザ名を指定します。
ChxjCookieMysqlUsername "roottest"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlPassword
MySQLサーバに接続する際に使用するパスワードを指定します。
ChxjCookieMysqlPassword "pwtest"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlSocketPath
MySQLのソケットパスを指定します。
ChxjCookieMysqlSocketPath "/tmp/mysql.sock"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlCharset
MySQLのエンコードを指定します。
ChxjCookieMysqlCharset "utf8"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMysqlTablename
MySQLのクッキーを保存するテーブル名を指定します。
ChxjCookieMysqlTablename "chxj_cookie"
上記のように"chxj_cookie"と指定すると、実際に作成されるテーブルは、chxj_cookieとchxj_cookie_expireテーブルの2つになります。詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMemcacheHost
memcachedの動作するホストを指定します。
ChxjCookieMemcacheHost "localhost"
詳細は「Cookieシミュレート機能」の項を参照ください。
ChxjCookieMemcachePort
memcachedのポート番号を指定します。
ChxjCookieMemcachePort 11211
詳細は「Cookieシミュレート機能」の項を参照ください。
変換可能なCHTMLタグは以下のとおりです。
タグ | 属性 | 備考 |
---|---|---|
<!-- --> | 無視します。 | |
<A> | ||
name | HDMLでは無視します | |
href | ||
accesskey | ||
<BASE> | HDMLでは無視します | |
href | HDMLでは無視します | |
<BODY> | HDMLでは無視します | |
bgcolor | HDML,CHTML1.0では無視します | |
text | HDML,CHTML1.0では無視します | |
link | HDML,CHTML1.0では無視します | |
alink | HDML,XHTML,CHTML1.0,CHTML2.0,CHTML3.0,JHTML,JXHTMLでは無視します。0.12.0以降で対応 | |
vlink | HDML,XHTML,CHTML1.0,CHTML2.0,CHTML3.0,JHTML,JXHTMLでは無視します。0.12.0以降で対応 | |
<BLINK> | HDML,CHTML1.0では無視します。0.11.0以降で対応 | |
<BLOCKQUOTE> | 0.11.0以降で対応 | |
<BR> | ||
clear | HDMLでは無視します。0.11.0以降で対応 | |
<CENTER> | ||
<DIR> | 0.11.0以降で対応 | |
type | HDML,CHTML1.0,CHTML2.0,CHTML3.0,JHTMLでは無視します。0.12.0以降で対応 | |
<DL> | HDMLでは無視します。0.11.0以降で対応 | |
<DT> | 0.11.0以降で対応。必ずタグは閉じてください | |
<DD> | 0.11.0以降で対応。必ずタグは閉じてください | |
<DIV> | ||
align | ||
<FONT> | HDML,CHTML1.0では無視します | |
color | HDML,CHTML1.0では無視します | |
size | 0.12.0以降で対応。HDML,CHTML1.0,CHTML2.0,CHTML3.0,CHTML4.0では無視します。 | |
<FORM> | ||
action | ||
method | HDMLでは無視します | |
<Hn> | HDML,JHTMLではalignのみ有効。0.11.0以降で対応 | |
align | HDML,JHTMLではalignのみ有効。0.11.0以降で対応 | |
<HR> | ||
align | HDMLでは無視します。 | |
size | HDMLでは無視します。 | |
width | HDMLでは無視します。 | |
color | HDML,CHTML1.0,CHTML2.0,CHTML3.0では無視します。0.12.0以降で対応 | |
<HTML> | 属性を指定した場合は無視されます | |
<IMG> | ||
src | ||
align | ||
width | ||
height | ||
hspace | JHTMLでは無視します。 | |
vspace | JHTMLでは無視します。 | |
alt | ||
<INPUT> | ||
name | ||
type | text,password,hidden,radio,checkbox,submit,resetに対応 | |
value | ||
istyle | ||
size | HDMLでは無視します。 | |
maxlength | ||
checked | HDMLでは非対応。 | |
accesskey | ||
<LI> | ||
type | 0.11.0以降で対応。HDML,CHTML1.0では無視します。 | |
value | 0.11.0以降で対応。HDML,CHTML1.0では無視します。 | |
<MENU> | 0.11.0以降で対応。HDMLでは無視します。 | |
type | HDML,CHTML1.0,CHTML2.0,CHTML3.0,JHTMLでは無視します。0.12.0以降で対応 | |
<MARQUEE> | 0.11.0以降で対応。HDML,CHTML1.0,XHTMLでは無視します。 | |
direction | 0.11.0以降で対応。HDML,CHTML1.0,XHTMLでは無視します。 | |
behavior | 0.11.0以降で対応。HDML,CHTML1.0,XHTMLでは無視します。 | |
loop | 0.11.0以降で対応。HDML,CHTML1.0,XHTML,JHTMLでは無視します。 | |
bgcolor | 0.12.0以降で対応。HDML,CHTML1.0,CHTML2.0,CHTML3.0,CHTML4.0,JHTMLでは無視します。 | |
<OL> | 0.11.0以降で対応。HDMLでは無視します。 | |
type | 0.11.0以降で対応。HDML,CHTML1.0では無視します。 | |
start | 0.11.0以降で対応。HDML,CHTML1.0では無視します。 | |
<SELECT> | ||
name | ||
size | HDMLでは無視します | |
multiple | HDML,CHTML1.0では無視します。0.11.0以降で対応 | |
<OPTION> | 必ずタグは閉じてください | |
value | ||
selected | HDMLでは無視します | |
<P> | HDMLではalignのみ有効。 | |
align | 0.11.0以降で対応。 | |
<PLAINTEXT> | 0.11.0以降で対応。 | |
<PRE> | HDMLは0.11.0以降で対応。 | |
<TEXTAREA> | ||
name | ||
rows | ||
cols | ||
accesskey | 0.11.0以降で対応。 | |
istyle | 0.11.0以降で対応。 | |
<META> | ||
http-equiv | CHTML1.0,HDMLでは無視されます | |
content | CHTML1.0,HDMLでは無視されます | |
<HEAD> | 属性を指定した場合は無視されます | |
<TITLE> | 属性を指定した場合は無視されます | |
<UL> | 0.11.0以降で対応。 | |
type | HDML,CHTML1.0,CHTML2.0,CHTML3.0,JHTMLでは無視します。0.12.0以降で対応 | |
<CHXJ:IF> | lang | lang属性には"chtml","xhtml","hdml","jhtml","jxhtml"が指定できます。(jxhtmlは0.12.0以降で対応) |
上記以外のタグは全て無視します。
<CHXJ:IF>
<CHXJ:IF>タグと</CHXJ:IF>タグではさまれたタグやテキストは、変換せずにそのまま(5)出力します。必須の属性としてlangがあります。lang属性を指定することによって、例えば、「HDML機の場合のみ出力させる」といったことを可能にします。
ex)
<CHXJ:IF lang="HDML" > <NODISPLAY> <ACTION TYPE=ACCEPT TASK=GOSUB \ DEST='device:data/dnld?url=abc&name=abc.jpg&size=100&disposition=devjaww&title=test'> \ </NODISPLAY> </CHXJ:IF>
ex)
<CHXJ:IF lang="chtml" > シークレットコードがどーのこーの。 </CHXJ:IF>
また、lang属性は、複数指定することも可能です。
<CHXJ:IF lang="chtml" lang="jhtml"> あなたの携帯は、HDML機かJ-HTML機です。 </CHXJ:IF>
i-Mode用の絵文字を書いておけば、アクセスしたキャリアによって、mod_chxjが対応の絵文字に自動変換します。ソースに2byteのバイナリコードを直接書いても、10進参照文字列(6)(&#XXX;の形)で書いても、どちらでも変換対象になります。10進参照文字列で書いた場合は、mod_chxjにより、自動で2バイトコードに変換します。
絵文字の変換に関する動作を変えたい場合(例えば「ハートがあったら、auの場合はスペードに」とか、「変換定義がおかしい」といった場合)は、emoji.xmlファイルを直接編集することによって定義を変更することが可能です。emoji.xmlはXMLファイルとなっていますので、vi等で簡単に定義を変更することができます。
以下に、emoji.xmlファイルの一部を記します。
<?xml encoding="Shift_JIS" > <emoji> <set> <no>1</no> <imode> <hex1>f8</hex1> <hex2>9f</hex2> <string></string> <description></description> </imode> <ezweb> <A>44</A> <B>44</B> <C>44</C> <D>44</D> </ezweb> <jphone> <string>$Gj</string> </jphone> </set>
絵文字の定義は、<emoji>タグから</emoji>タグまでの間にあります。その中の要素を説明します。1つの絵文字につき、1つのセット(<set>タグから</set>タグまで)とし、キャリア毎の絵文字を定義しています。
emoji.xmlに定義されていない絵文字で、変換したい絵文字がある場合には、このファイルに新たな定義を足せば、変換するようになります。
mod_chxjの動作を決定付ける重要な定義です。変換対象の端末は全て、device_data.xmlファイルに定義される必要があります。定義されていない端末は、mod_chxjとしては、認識することができません。認識できない場合には、変換せずにそのまま出力します。ただし、Perl互換の正規表現によって定義できるため、正規表現の書き方によっては全ての機種に対応させることも可能です。
mod_chxjには、JPEG、GIF、PNG、BMPファイルを置いておくだけで、デバイス定義に従って、それぞれのキャリア対応のフォーマットに変換する機能があります。画像のサイズ(縦X横)も、端末の画面サイズに合わせて変換します。画像のサイズ(バイト数)については、デバイス定義中のキャッシュサイズを見て、その値よりも小さくなるように努力しますが、元の画像が大きすぎる場合や、複雑な画像の場合には、キャッシュサイズよりも小さくできずに表示できない場合があります。
それぞれのタグで指定する場合には、ファイル名の拡張子(.jpgや.gif等)をはずした形で指定します。
本機能には3つのモードが存在します。そのモードを以下に記します。
端末側画面サイズの約3分の1程度のサイズ(縦X横)に画像を縮小表示します。
<IMG SRC="/img/logo?Mode=Thumbnail">
端末側画面のサイズにマッチするサイズに拡大・縮小します。横長の画像の場合には、縦幅を合わせた後に左右をトリミングします。
<IMG SRC="/img/logo?Mode=WP">
壁紙ダウンロードを行いたい場合に使用します。EzGETモードは、壁紙モードで出力される画像サイズと同一サイズの画像が使用されます。
<A HREF="/img/logo?Mode=EzGet">
モードの他に、画像サイズ(縦X横)を直接指定することも可能です。wパラメータ、hパラメータを使用して指定します。
<IMG SRC="/img/logo?w=100&h=200">
上記全てのモード、パラメータはGETリクエストとしてのみ使用できます。
QRコード出力機能を使用するには、QRコードハンドラを登録します。(7)httpd.confに以下の記述を追加します。
AddHandler chxj-qrcode .qrc
なお、ハンドラを登録しないでも、出力フィルターを経由させることで、QRコードを出力させることも可能です。(※QRコードの動的出力を参照)
ハンドラを登録したら、その登録した拡張子を持つファイルを用意します。
<?xml version=1.0 ?> <qrcode> <version>13</version> <level>H</level> <mode>8bit</mode> <size>1</size> <data>テストデータです</data> </qrcode>
.qrcファイルは、qrcode要素、version要素、level要素、mode要素、size要素、data要素から成り立ちます。
プログラム等を使用し、動的にQRコードを出力したい場合は、上記の.qrcファイルの内容をそのままOutputFilterに通してあげればOKです。つまり、ChxjConvertRuleディレクティブで"EngineOn"と指定したURIが指すディレクトリに設置すれば良いということです。mod_chxj内部で、Content-Typeがtext/xmlの場合、QRCode用のファイルであるかどうかを一度読み込んで判断するので、Content-Typeには、text/xmlを設定してください。
<php $version = $_POST["version"]; $level = $_POST["level"]; $mode = $_POST["mode"]; $size = $_POST["size"]; $data = $_POST["data"]; header("Content-Type: text/xml; charset=Shift_JIS"); echo "<qrcode>\n"; echo "<version>".$version."</version>\n"; echo "<level>".$level."</level>\n"; echo "<mode>".$mode."</mode>\n"; echo "<size>".$size."</size>\n"; echo "<data>".$data."</data>\n"; echo "</qrcode>\n"; >
そして、上記のコードを、mod_chxj変換エンジンが処理するはずであるところに設置すれば完了です。
Cookieを受け付けない(無視する)端末のためにCookieをシミュレートします。本機能を有効にするためにはChxjConvertRuleディレクティブを使用する必要があります。ChxjConvertRuleディレクティブの第2パラメータにCookieOnを指定します。
ChxjConvertRule "^/chxj.+$" "EngineOn,CookieOn" "NONE"
Cookieシミュレートでは、aタグ、imgタグ、formタグのURL部にOne-Time IDを埋め込むことで実現します。そのため、ユーザがブラウザの戻るボタン等で戻った場合はCookieを取得できなくなります。One-Time IDを使用する必要が無い場合、またはOne-Time IDを使用したくない場合には、CookieLazyModeを使用することで毎回同一IDを発行させることができます。
Cookieの内容はサーバ側に保存されます。保存先にはdbm、memcached、mysqlが選択できます。
注意) memcached、mysqlを保存先に選択する場合はconfigure時にそれぞれ指定する必要があります
保存先の指定にはChxjCookieStoreTypeディレクティブを使用します。
ChxjCookieStoreType "dbm"
ChxjCookieStoreType "mysql"
ChxjCookieStoreType "memcache"
上記ChxjCookieStoreTypeが指定されない場合はdbmが選択されます。
dbmを使用する場合は、ChxjCookieDirディレクティブを指定し、保存ディレクトリを指定します。指定しなかった場合は/tmpに保存されます。
ChxjCookieDir /var/abc
DBMの代わりにMySQLやmemcachedを指定することもできます。その際は、ChxjCookieDirは指定する必要はありません。MySQLを使用するには、configure時にMySQL COOKIE機能を有効にして、コンパイルする必要があります。(8)memcachedを使用するには、configure時にMEMCACHE COOKIE機能を有効にして、コンパイルする必要があります。(9)
MySQLを使用する場合にはChxjCookieStoreTypeディレクティブのほかに、以下のディレクティブを指定する必要もあります。
ChxjCookieMysqlHost "localhost"
ChxjCookieMysqlPort 3306
ChxjCookieMysqlDatabase "test_db"
ChxjCookieMysqlUsername "roottest"
ChxjCookieMysqlPassword "pwtest"
ChxjCookieMysqlSocketPath "/tmp/mysql.sock"
ChxjCookieMysqlCharset "utf8"
ChxjCookieMysqlTablename
MySQLのクッキーを保存するテーブル名を指定します。
ChxjCookieMysqlTablename "chxj_cookie"
上記のように"chxj_cookie"と指定すると、実際に作成されるテーブルは、chxj_cookieとchxj_cookie_expireテーブルの2つになります。
memcachedを使用する場合にはChxjCookieStoreTypeディレクティブの他に以下のディレクティブを指定する必要もあります。
ChxjCookieMemcacheHost "localhost"
ChxjCookieMemcachePort 11211
ChxjCookieTimeoutディレクティブで保持期間を指定することができます。指定しなかった場合は1800秒でサーバに保存されているCookieは削除されます。
<Location /> ChxjCookieTimeout 10 </Location>
上記の例は、10秒でタイムアウト(サーバから削除)するように指定しています。
ChxjCookieLazyModeディレクティブで"true"を指定するとOne-Time IDを使用しないようにすることができます。Cookie用のIDは毎回同一のIDが割り振られます。以下にCookieLazyModeの例を記します。
ChxjCookieLazyMode true
true以外を指定すると通常のOne-Time IDモードになります。
DoCoMo端末などのRefererに対応していない機種のためにRefererシミュレート機能を提供します。本機能は、Cookieシミュレート機能を有効にすると、自動で有効になります。