Quercus用PHP設定ファイル
先ほどweb.xmlファイルに「php.ini」というファイル名を定義しました。このファイルはQuercusに対するPHPの設定情報を記述するファイルです。
C言語で実装されたPHPのディレクティブがすべて使えるというわけではありませんので、注意が必要です。
それではphp.iniを「war/WEB-INF」フォルダ配下に追加し、次の内容を定義しましょう。
unicode.semantics=on unicode.http_input_encoding=MS932 unicode.output_encoding=Windows-31J unicode.runtime_encoding=MS932
(1)unicode.semantics
QuercusのPHP実行環境ではバイト配列はISO-8859-1として扱われますが、日本語を扱う場合など、Unicodeとして扱いたい場合には、この設定を「on」にする必要があります。
(2)unicode.http_input_encoding
HTTPのPOSTメソッドなどで、クライアント側から送信されたリクエストの文字列を解析する際に使用するエンコーディングを指定します。
(3)unicode.output_encoding
QuercusServletがレスポンスとして返すHTTPヘッダのContentTypeに記述されるcharsetの値を指定します。
(4)unicode.runtime_encoding
QuercusServletがパラメータなどで受け取った文字列を解析するためのエンコーディングを指定します。
QuercusではC言語で実装されたPHP5または6のスクリプトがそのまま動作することを目指していますので、php.iniファイルのディレクティブも多くのものが設定可能となっています。
例えば上記で設定した「unicode.semantics」などのディレクティブは、C言語で実装されたPHP6から使用可能になっています。また、「jms.connection_factory」など、Java依存のディレクティブも設定可能です。
ただし、設定は可能ですが内部では使われていないディレクティブもあり、ドキュメントも未整備なため、具体的にどのディレクティブが有効かを確認するにはソースを見るしかないのが残念です。Google App Engine for Javaへの対応と共に、今後を期待したいところです。
Echoアプリケーション
それでは、フォームのテキストフィールドに入力した文字列をPOSTで自分自身に送信し、表示させるEchoアプリケーションを作成してみましょう。このサンプルではPHPのスクリプトファイルは、すべてMS932で作成します。
作成したプロジェクト(PHPonGAE4J)をマウスで選択した後、Eclipseのメニューから[ファイル]-[新規]-[ファイル]を選択します。[新規ファイル]ダイアログで「war」以下に「echo.php」という名前のファイルを作成します。
「echo.php」を右クリックし、メニューから[プロパティー]を選択します。
「プロパティー:echo.php」ダイアログの左側にある[リソース]を選択すると、「テキスト・ファイル・エンコード」の値を確認できます。
「echo.php」には、次のように記述します。
<html> <head> <meta http-equiv="content-type" content="text/html; charset=Windows-31J" /> <title>Echoサンプル</title> </head> <body> <h1>Echoサンプル</h1> <?php // (1)$_POST変数から"echo"という名前のパラメータを取得 $echo = $_POST["echo"]; // (2)タグなどの文字をエンティティに変換 $echo = htmlspecialchars($echo, ENT_QUOTES); if ($echo != "") { ?> <!-- (3)$echo変数の値を表示 --> <p style="border-style:solid"><?= $echo ?></p> <?php } ?> <!-- (4)自分自身へPOST --> <form action="/echo.php" method="post"> <div><input type="text" name="echo" /></div> <div><input type="submit" value="送信" /></div> </form> </body> </html>
C言語で実装されたPHPのスクリプトと同じです。ここでは次のような処理を記述しています。
$_POST
変数から"echo"という名前のパラメータを取得し、$echo
変数に代入- タグなどの文字をエンティティに変換
$echo
変数の値を表示- 自分自身(echo.php)にPOSTメソッドで送信