エントリを表示するPHPスクリプト
登録されたエントリを表示するPHPスクリプトは次のようになります。
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=Windows-31J" />
</head>
<body>
<?php
// (1)guestbook.phpをincludeする
include_once("guestbook.php");
// (2)最大取得数を指定して、GuestBookの配列を取得する
$books = GuestBook::all(5);
$i = 0;
for($i = 0; $i < $entry_max; $i++)
{
$book = $books[$i];
if ($book == null)
break;
?>
<!-- // (3)日付を表示 -->
<span><?= $book->getDate() ?></span>
<!-- // (4)名前を表示 -->
<span><?= $book->getName() ?></span>
<!-- // (5)コメントを表示 -->
<blockquote><?= $book->getComment() ?></blockquote>
<!-- // (6)削除リンク -->
<a href="/delete.php?id=<?= $book->getId() ?>">削除</a>
<?php
}
?>
<!-- // (7)put.phpにPOSTで送信 -->
<form action="/put.php" method="post">
<div>名前</div>
<div><input type="text" name="name" /></div>
<div>コメント</div>
<div><textarea name="comment" rows="3" cols="30"></textarea></div>
<div><input type="submit" value="投稿" /></div>
</form>
</body>
</html>
- guestbook.phpをincludeする
- 最大取得数を指定して、GuestBookの配列を取得する
- 日付を表示
- 名前を表示
- コメントを表示
- 削除リンク
- put.phpにPOSTで送信
先ほど定義したPHPのGuestBookクラスをインクルードします。
GuestBookクラスのスタティック関数all()を実行してGuestBookクラスのインスタンスを配列として取得します。ここでは最大5つのGuestBookクラスのインスタンスを取得しています。
GuestBookクラスのgetDate()メソッドを呼び出して、JavaのEntryクラスから登録日時を取得します。
GuestBookクラスのgetName()メソッドを呼び出して、JavaのEntryクラスから名前を取得します。
GuestBookクラスのgetComment()メソッドを呼び出して、JavaのEntryクラスからコメントを取得します。
後述するdelete.phpスクリプトに対し、Idをパラメータとして渡すURLを作成します。GuestBookクラスのgetId()メソッドを呼び出して、JavaのEntryクラスからIdを取得します。
後述するput.phpスクリプトに対し、名前とコメントをパラメータとしてPOSTで送信します。
エントリを登録するPHPスクリプト
次にエントリ情報を登録するPHPスクリプトを見てみましょう。
index.phpのフォームからPOSTで呼び出されるスクリプトで、パラメータとして"name"と"comment"を受け取ります。
<?php
// guestbook.phpをincludeする
include_once("guestbook.php");
// "name"、"comment"を$_POST変数から取得
$name = $_POST["name"];
$comment = $_POST["comment"];
$name = htmlspecialchars($name, ENT_QUOTES);
$comment = htmlspecialchars($comment, ENT_QUOTES);
// (1)エントリを作成
$entry = new GuestBook($name, $comment);
// (2)App Engineデータストアに保存
$entry->put();
// index.phpにリダイレクト
header("HTTP/1.1 301 Moved Permanently");
header("Location: /index.php");
?>
- エントリを作成
- App Engineデータストアに保存
受け取った$name、$commentの値を使用してPHPのGuestBookクラスのインスタンスを作成します。
GuestBookのput()メソッドを呼び出して、App Engineデータストアにエントリ情報を保存します。
エントリを削除するPHPスクリプト
最後に、エントリを削除するPHPスクリプトを見てみましょう。
<?php
// guestbook.phpをincludeする
include_once("guestbook.php");
// "id"を$_GET変数から取得
$id = $_GET["id"];
// (1)指定されたIdに対応するエントリをデータストアから削除
GuestBook::deleteById($id);
// index.phpにリダイレクト
header("HTTP/1.1 301 Moved Permanently");
header("Location: /index.php");
?>
- 指定されたIdに対応するエントリをデータストアから削除
PHPのGuestBookクラスのdeleteById()スタティック関数を呼び出して、保存されているJavaのEntryクラスのインスタンスをApp Engineデータストアから削除します。
ゲストブックアプリケーションの実行
それでは早速実行してみましょう。
パッケージ・エクスプローラーでプロジェクト(guestbook)を選択し、右クリックで出てくるメニューから[実行]-[Web Application]を選択します。
それでは、次のURLにブラウザでアクセスしてみましょう。
http://localhost:8080/index.php
次のような画面が表示されていることと思います。
名前、コメントのフィールドに文字を入力して、[投稿]ボタンでゲストブックを投稿できます。また「削除」リンクをクリックすると選択したエントリを削除することができます。
まとめ
本記事で紹介したサンプルでは、PHPからApp Engineデータストアを操作するのに頑張ってやっている印象を持たれると思いますが、簡単なPHPスクリプトであればGoogle App Engine for Javaで動作させることは確認していただけたのではないでしょうか。
有志の方がQuercusのパッチを作成しているなど、PHP界隈でもGoogle App Engine for Javaへの対応は今後進んでくると思います。
JavaVMで動作するスクリプト系言語についてみれば、例えばGrailsではGoogle App Engineをサポートするようになりました。
今後とも無視できないGoogle App Engine。注目していきたいと思います。

