エントリを表示する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。注目していきたいと思います。