SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Google App Engine for Javaで動作するスクリプト系言語

PHPも使える! Google App Engine for Java(前編)

Google App Engine for Javaで動作するスクリプト系言語 (1)

  • X ポスト
  • このエントリーをはてなブックマークに追加

Quercus用PHP設定ファイル

 先ほどweb.xmlファイルに「php.ini」というファイル名を定義しました。このファイルはQuercusに対するPHPの設定情報を記述するファイルです。

 C言語で実装されたPHPのディレクティブがすべて使えるというわけではありませんので、注意が必要です。

 それではphp.iniを「war/WEB-INF」フォルダ配下に追加し、次の内容を定義しましょう。

[リスト3]php.ini
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で設定できるphp.iniのディレクティブ

 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」には、次のように記述します。

[リスト4]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のスクリプトと同じです。ここでは次のような処理を記述しています。

  1. $_POST変数から"echo"という名前のパラメータを取得し、$echo変数に代入
  2. タグなどの文字をエンティティに変換
  3. $echo変数の値を表示
  4. 自分自身(echo.php)にPOSTメソッドで送信

次のページ
echo.phpの実行

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Google App Engine for Javaで動作するスクリプト系言語連載記事一覧
この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 花田 善仁(ハナダ ヨシヒト)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/3948 2009/06/09 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング