GoogleApp Engine (GAE)で、PHPを使ってみる(PHP4G)

PHPGoogle App Engine (GAE)で動いたら……という夢を実現してくれる、PHP4Gをインストールしてみます。
だって他の言語を学ぶほど、PHPもまだ理解できてませんからね!

Google Plugin for Eclipseのインストール

Google Plugin for Eclipseは、Google App EngineGoogle Web Toolkit の開発をするためのプラグインです。


Google Plugin for Eclipseは、その名のとおりEclipse上で動作するので、まだインストールしていない場合は昨日アップしたこの記事を参考にあらかじめインストールしてください。
※GAEでPHPを使う場合、Eclipse IDE for Java EE Developers」を選択しましょう。PDTは後でプラグインとして導入します。



Eclipse は、Eclipse の Web サイトから入手できます。「Eclipse IDE for Java EE Developers」には、Web アプリケーション開発に必要なすべてのコンポーネントが含まれています。

2.Eclipseの対応するバージョンの下にあるリンクをコピーします

[PHP4G]

http://dl.google.com/eclipse/plugin/3.6

3.Eclipseの「ヘルプ」−「新規ソフトウェアのインストール」を順にクリックして

[PHP4G]

4.作業対象に先程のリンクを張り付け、「Enter」

[PHP4G]

5.「すべて選択」をクリックして、「次へ」をクリック

[PHP4G]

6.「インストール詳細」を確認して、「次へ」をクリック

[PHP4G]

7.「ライセンス・テキスト」を確認して、「使用条件の条項に同意します」にチェックをいれ、「完了」をクリック

[PHP4G]

8.自動的にインストールが進みます。

[PHP4G]

9.以下の確認画面が出ますが、今更Googleを疑っても仕方ないので「OK」をクリック

[PHP4G]

10.指示に従い「Restart Now」

[PHP4G]

「GAE上で動作するアプリケーションのプロジェクトを作成」する練習

プロジェクトの作成の仕方を知っていたら飛ばしていいです。

1.「ウィンドウを開く」−「パースペクティブを開く」−「その他」をクリック

[PDT 2.2]
「パースペクティブとは、ビューやエディター(メニュー、ツールバー、etc…)の組み合わせと配置のこと」です。パースペクティブによって「ファイル」−「新規」で表示される内容が変わったりします。つまりそのままのパースペクティブだとPHPが表示されないわけです。

2.「パースペクティブを開く」で「Java」を選択して、「OK」をクリック

[PDT 2.2]
この後の手順を進めるには、パースペクティブJavaの必要があります。既にパースペクティブJavaの場合には、1/2の手順は不要です。

3.「ファイル」−「新規」−「Web Applicaton Project」をクリック

[PHP4G]

4.「New Web Application Project」の「Prject name」「Package」を入力し、「Use Google Web Toolkit」のチェックを外し、「終了」をクリック

[PHP4G]

5.プロジェクトに加わっていることを確認する

[PHP4G]

6.登録したプロジェクトは練習用なので、右クリックして削除してしまって結構です

PHP4Gのインストール、環境構築

1.「GAE上で動くPHP実行環境 【PHP4G】」のウェブサイトを開きます。
2.「ダウンロード」をクリック

[PHP4G]

3.「PHP4Gのダウンロードはこちらから」のリンクをクリック
4.「LittleSoft PHP4G」の「ダウンロード」をクリック

[PHP4G]

4.ダウンロード申込みフォームが開くので、必要項目を入力。メールでダウンロードURLが届くので、それを開きます。
5.「LS Cloudware ダウンロードサービス」が起動するので、警告を処理して実行します。
6.PHP4Gのダウンロード先を聞いてくるので、指定します(ファイルダウンロードが始まります)

※今回はphp4g-0.10.8.16-alpha.zipをダウンロードしました。

7.zipファイルを展開して、README.TXTを読み、インストール・設定方法を確認します。

SQL4GでGAE+PHPを体験しようの記事とは手順が既に異なっています。


(1)



Eclipseのプロジェクトインポート機能にて、当ディレクトリを指定すると、PHP4G + SQL4G が使用できる環境が揃ったプロジェクトが使用可能になります。


(2)



プロジェクトのプロパティから [google] - [App Engine] を選択し、
[Use Google App Engine] チェックボックスを 再度チェックして、


(3)



appengine で使用している jar が [root]/war/WEB-INF/lib に登録されていること(※)を確認
(※)appengine で使用している jar とは、appengine-api-x.x-sdk-x.x.x.jar など複数存在します。環境により何回かチェックボックスへの操作を行う必要があります

・[root]/src/META-INF/jdoconfig.xml が作成されている場合、こちらのファイルは削除してください。

7.(1)「ファイル」−「インポート」を順にクリックします

[PHP4G]

7.(1)「インポート」で「一般」−「既存プロジェクトをワークスペースへ」を順にクリックし、「次へ」をクリックします

[PHP4G]

7.(1)「アーカイブファイルの選択」をクリックして、6でダウンロードしたファイルを「参照」し、「完了」をクリックします。

[PHP4G]

7.(1)「プロジェクト…エクスプローラー」に「PHP4G」が追加されていることを確認します。

[PHP4G]
※「PHP4G」に×印がついていることを確認してください。

7.(2)「PHP4G」の上で右クリックして、「プロパティ」をクリックします。

[PHP4G]

7.(2)プロパティのメニューの「Google」をクリックします。

[PHP4G]

7.(2)「App Engine」をクリックします。「[Use Google App Engine] チェックボックスを 再度チェック」し、GAEの「Application ID」を入力します。

[PHP4G]


※GAEの「Application ID」は、下の画面に既に登録されているものを使ってください。登録していない場合は登録してください。手順はcronを使えないなら無料で使えるGoogleApp Engine(GAE)を使えばいいじゃない!の「アプリケーションの登録」の部分が参考になります。
[PHP4G]


7.(2)先程まであった「PHP4G」の×マークがなくなったことを確認します。

[PHP4G]

7.(3)「PHP4G」をクリックして、展開し、ここに「[root]/war/WEB-INF/lib に登録されていること」を確認し、また「[root]/src/META-INF/jdoconfig.xml が作成されている場合、こちらのファイルは削除」します。

[PHP4G]

8.php.iniの確認

「PHP4G」をクリックして、展開し、[root]/war/WEB-INF/php.ini を確認します。

;【重要】GAEでは最終的なフルパスが動的に変化するので、include_pathは使えません。
;[projectRoot]/war/phplibs/inc.php でpathを定義してください
;include_path = "."

unicode.semantics=on
unicode.http_input_encoding=UTF-8
unicode.output_encoding=UTF-8
unicode.runtime_encoding=UTF-8

unicode.script_encoding=UTF-8
unicode.fallback_encoding=UTF-8

mb_language=unicode
mb_internal_encoding=UTF-8
mb_http_input=auto
mb_http_output=UTF-8


max_execution_time = 60 ; Maximum execution time of each script, in seconds
max_input_time = 120 ; Maximum amount of time each script may spend parsing...
memory_limit = 512M ; Maximum amount of memory a script may consume (8MB)

output_buffering=on

確認しましたが、SQL4GでGAE+PHPを体験しようにある「追記」等は既に済んでいるもののようなので、書換え不要です。

9.[root]/war/WEB-INF/を開き、「web.xml」と「appengine-web.xml」を確認します

web.xml

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

  <servlet> 
    <servlet-name>Quercus For SQL4G Servlet</servlet-name> 
    <servlet-class>com.caucho.quercus.servlet.QuercusServlet</servlet-class> 
    <init-param> 
        <param-name>script-encoding</param-name> 
        <param-value>UTF-8</param-value> 
    </init-param>     
    <init-param> 
        <param-name>ini-file</param-name> 
        <param-value>WEB-INF/php.ini</param-value> 
    </init-param> 
  </servlet> 
  
  <welcome-file-list>
    <welcome-file>index.php</welcome-file>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>
    
  <servlet-mapping> 
    <servlet-name>Quercus For SQL4G Servlet</servlet-name> 
    <url-pattern>*.php</url-pattern> 
  </servlet-mapping>
  
  
  <!-- SQL4G Database Admin -->
  <servlet>
    <servlet-name>SQL4GAdmin</servlet-name>
    <servlet-class>jp.littlesoft.sql4g.SQL4GServlet</servlet-class>
    <init-param>
      <param-name>VelocityFileLoaderPath</param-name>
      <param-value>template</param-value>
    </init-param>
    <init-param>
      <param-name>sql4g.instanceId</param-name>
      <param-value>1</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>SQL4GAdmin</servlet-name>
    <url-pattern>/sql4gadmin</url-pattern>
  </servlet-mapping>


  <!-- Welcome File -->
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
  </welcome-file-list>

</web-app>

appengine-web.xml

<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
	<application>PHP4G</application>
	<version>1</version>
	
	<!-- Configure java.util.logging
	<system-properties>
		<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
	</system-properties>
	 -->
	   
	<static-files> 
    <exclude path="/**.php" />   
    <exclude path="/templates/**.tpl" />
  </static-files>
  
  <resource-files>
    <include path="/**.php" />
    <include path="/templates/**.tpl" />
  </resource-files>
	 
	 
	<ssl-enabled>true</ssl-enabled>
  <sessions-enabled>true</sessions-enabled>
  <precompilation-enabled>true</precompilation-enabled>
  
</appengine-web-app>

確認しましたが、SQL4GでGAE+PHPを体験しようにある「追記」等は既に済んでいるもののようなので、書換え不要です。

10.「実行」−「実行」をクリック
11.http://localhost:8888/sql4gadminをブラウザで開く

8888には、適切なポート番号をいれてください。
[PHP4G]
このような初期画面が表示されれば、設定完了です。

GAEで動作を確認する

1.「PHP4G」の上で右クリック、その後「Google」−「Deploy App Engine」をクリック

[PHP4G]

2.Googleのアカウント(Email/Password)を入力して、「Deploy」をクリック

[PHP4G]

3.GAEの公開用URL(http://******.appspot.com)を開いたとき、以下の画面がでていれば、インストール完了です。

[PHP4G]

4.サンプルPHPファイル(http://******.appspot.com/hello.php)も開いてみましょう

[PHP4G]

まとめ

Eclipseはじめての人にとっては辛いチャレンジでした。
@ITの記事も古くなってますし、readme.txtは解説というには数行でしたしね……。
なんとか動くようになってよかったです。

PHP4Gは機能拡張実装中です(仮称 PHP4G Version2)これは、PHPプロセッサ の Quercus の最新版に追従し、PHPのVersionUPや実装クラスが大幅に追加。SQL4Gとの親和性向上など新機能を盛り込みます。 #appengineless than a minute ago via web

ということで、すぐにこのメモも使えなくなりそうですが、参考にはなるかしら……。

PHP4Gは、QuercusというJavaで実装されているPHPプロセッサだそうですが、PHPの通常のバージョンでいうとどのあたりなのか、実際に使いながら学んでいこうと思います。
http://www.atmarkit.co.jp/fcoding/articles/gaephp/06/gaephp06a.htmlぐらいですから、工夫すれば大抵のことはやれるでしょう!
……解説がほぼ0なのはハードル高いですけどねorz