2010-06-09

在 App Engine 上執行 PHP

Google App Engine 目前只支援 Java 和 Python,支援 Java 就有許多好玩的東西。Quercus 是 Caucho 用 Java 實現的 PHP 解譯引擎,在 Java 環境就可以執行。最早,webdigi 就弄了個 Demo,後來 Quercus 官網也弄了個範例。以下是個人實作的方式:
Step 1: 先要有 Gmail 帳號,到「https://appengine.google.com/」註冊使用 App Engine,認證方式使用手機認證,目前台灣只有三家電信收得到認證碼:中華電信、台哥大、威寶。我的是中華電信門號,當初是由台哥大轉過來的,結果收不到認證碼,後來借老婆的手機。另一種方式是寫 email,效率上當然較慢。
Step 2: 安裝 Eclipse 3.5 ( Eclipse IDE for Java EE Developers ),接著依照 App Engine Help 安裝Eclipse 專用的 Google 外掛程式」使用「http://dl.google.com/eclipse/plugin/3.5」。
Step 3: 設定 Eclipse 使用 JDK。Preferences → Java → (點擊) Installed JREs,將 JDK 安裝的路徑新增進去,再勾選使用。
Step 4: 設定文件預設編碼為 UTF-8。 Preferences → General → (點擊) Workspace,變更 Text file encoding 為 UTF-8。
Step 5: 建立新專案,選「Web Application Project」,然後類似下圖設定,Google SDKs 的兩個項目請皆勾選。
Step 6: 專案建立完成後,到「http://www.caucho.com/products/quercus/」下載「quercus-4.0.1.war」,用 7z 或可解 zip 的工具,解壓縮。將其中的「\WEB-INF\lib\resin.jar」放到 Eclipse 專案「\war\WEB-INF\lib\」裡。注意,版本不要用太高,否則會超過 App Engine 單一檔案大小限制 10 M,「quercus-4.0.3.war」就已經不行了 =..=
Step 7: 更改「\war\WEB-INF\web.xml」:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>

<!-- Servlets -->
<servlet>
<servlet-name>greetServlet</servlet-name>
<servlet-class>lin.shinder.appengine.server.GreetingServiceImpl</servlet-class>
</servlet>
<servlet>
<servlet-name>QuercusServlet</servlet-name>
<servlet-class>com.caucho.quercus.servlet.GoogleQuercusServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>greetServlet</servlet-name>
<url-pattern>/qopstudio/greet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>QuercusServlet</servlet-name>
<url-pattern>*.php</url-pattern>
</servlet-mapping>
<!-- Default page to serve -->
<welcome-file-list>
<welcome-file>QopStudio.html</welcome-file>
</welcome-file-list>
</web-app>

Step 8: 更改「\war\WEB-INF\appengine-web.xml」:
<?xml version="1.0" encoding="utf-8"?>
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
<application>qopstudio</application>
<version>1</version>
<!-- Configure serving/caching of GWT files -->
<static-files>
<include path="**" />
<!-- The following line requires App Engine 1.3.2 SDK -->
<include path="**.nocache.*" expiration="0s" />
<include path="**.cache.*" expiration="365d" />
<exclude path="**.gwt.rpc" />
<exclude path="/**.php"/>
</static-files>
<resource-files>
<include path="/**.php"/>
</resource-files>
<!-- Configure java.util.logging -->
<system-properties>
<property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/>
</system-properties>
</appengine-web-app>
Step 9: 寫個 phpinfo.php 放在「\war」裡,就可以測試了。$_SESSION 使用起來也 OK :)

1 則留言:

Shinder 提到...

打包的專案檔 http://www.riarock.net/qopsblog/2010/qopstudio.zip

FB 留言