google app enging for java 用來跑 PHP

前幾天 google 發布了 google app engine 支援了 java 後,就有聽說有人可以利用 Quercus 專案,來支援 PHP ,這是一個令人興奮的消息啊。像我不太會寫 python 的人,有 PHP 的支援,更可以讓更多的 web developer 快速上手。

幾天後,有一家公司的 blog 上發表了一篇「Run PHP on the Google App Engine」,他們已經成功的在 app engine 上執行 php 了。

他所列的步驟如下:

  1. Register a free account.
  2. Download this file to your computer.
  3. Edit application XML tag in the file war\WEB-INF\appengine-web.xml to the name of the application you have registered.
  4. Finally upload your application. I downloaded Google App Engine SDK for Java and use the following command in windows.

但我在本地端測試的時候,因為少了一些 package 所以沒辦法在本地端執行,你可以到 http://www.codehaus.org/ 下載 jetty package ,並且解壓縮到 app-engine 的 lib 目錄,即可以使用 dev_appserver.sh 這個指令在本地端測試了。Depoy 到 google 的 GAE 上的話,就不用這這個 package 了。

另外他沒有支援 Mysql 之類的關聯性資料庫,所以如果要 port 一些跟資料庫相關的東西的話,應該要自行改寫其資料庫的部份。

二個 postgresql 的 Tips

最近公司會用到 postgresql 來作為 Database ,不過因為之前都使用 Mysql 的 DB 設定和使用方法,所以有一些的不習慣,底下有二個我目前用到小技巧。

之前在 mysql 下,會使用 desc table 這個指令,來列出目前該 table 的 schema 有哪些。不過經由 postgresql 的 1.4. Accessing a Database 章節裡的使用者留言下說明,要用以下的方法來取代:

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SELECT column_name,data_type FROM information_schema.columns WHERE table_name = 'table_name'&amp;lt;br /&amp;gt;&lt;br /&gt;<br />

如果是 show table 這個指令,就得由以下的指令來取代:

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'&amp;lt;br /&amp;gt;&lt;br /&gt;<br />

另外由於我目前寫 php 時,都是經由 pdo 來存取 Database ,所以一般來說,我們都會使用 PDO::lastInsertId 來取得最後一筆插入的 ID ,不過因為 postgresql 並不支援該方法,所以會一直產生 false 的值。查了一下 php.net 的 PDO::lastinsertid 裡面的說明,他是改 select 一個 Sequences 的值,所以我依照我的需求改寫一下,就可以查出 last insert id 了。

&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
prepare($query);&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    $temp_q_id-&amp;amp;amp;gt;execute();&amp;lt;/p&amp;gt;&lt;br /&gt;<br />
&amp;lt;p&amp;gt;    if($temp_q_id)&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    {&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
        $temp_result = $temp_q_id-&amp;amp;amp;gt;fetch(PDO::FETCH_ASSOC);&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
        return ( $temp_result ) ? $temp_result['last_value'] : false;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
    }&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
}&amp;lt;br /&amp;gt;&lt;br /&gt;<br />
?&amp;amp;amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;<br />

當然在 php.net 上有更優雅的寫法,就是即時的分析 sql 字串,來找出 table ,但因為我的 pk 的鍵值都不一樣,所以才要自行作改寫了。

jquery 判定 browser 種類

在工作中,有一些需要為 IE 作特別的 hack ,例如像 IE 的 option 不吃 onclick 的事件之類的。但又不想讓他影響到 IE 之外的 browser 。在 jquery 裡面,可以使用下列的參數來判定是不是使用 IE 。

if(jQuery.browser.msie) alert("這個 browser 是 IE");

當然其他的參數也可以判定 browser 的板本與種類,可以參考Utilities/jQuery.browser這份文件。