昨年の 10 月ごろに Google App Engine for PHP がオープンになったらしいので触ってみました。
SDK のインストール
まずはローカルでアプリを実行したり Google App Engine へデプロイするために必要な SDK をインストールします。
Python 2.7
普段使っている CentOS 6 の python だと 2.6 系で古いので、pyenv で 2.7 系をインストールします。
$ cd $ git clone git://github.com/yyuu/pyenv.git .pyenv $ vi .bashrc export PATH="$HOME/.pyenv/bin:$PATH" eval "$(pyenv init -)" $ exec $SHELL $ pyenv install --list $ pyenv install 2.7.5 $ pyenv local 2.7.5 $ pyenv rehash
PHP 5.4
SDK でアプリをローカルで実行するためには PECL の Memcache や Memcached 拡張がインストールされているとダメです。
phpenv/php-build で普通にインストールすれば Memcache や Memcached は含まれないので、PHP も phpenv/php-build でインストールします。
Google App Engine の PHP は 5.4 なので 5.4 をインストールします。
$ cd $ curl https://raw.github.com/CHH/phpenv/master/bin/phpenv-install.sh | sh $ git clone git://github.com/CHH/php-build.git $HOME/.phpenv/plugins/php-build $ vi .bashrc export PATH="$HOME/.phpenv/bin:$PATH" eval "$(phpenv init -)" $ exec $SHELL $ phpenv install --list $ phpenv install 5.4.25 $ phpenv local 5.4.25 $ phpenv rehash
SDK
SDK をインストールします。ダンロードして展開するだけです。
$ cd $ wget http://googleappengine.googlecode.com/files/google_appengine_1.8.9.zip $ unzip google_appengine_1.8.9.zip
サンプルアプリの作成
サンプルアプリを作成します。
mkdir helloworld cd helloworld
helloworld.php
<?php echo "Hello, World!";
App Engine のアプリケーション設定ファイルを作成します。 このファイルでアプリの識別子やランタイム(PHP)や URL のマッピングを記述します。
app.yaml
application: helloworld version: 1 runtime: php api_version: 1 handlers: - url: /.* script: helloworld.php
SDK を使ってサンプルアプリをローカルで実行します。
$ cd $ google_appengine/dev_appserver.py --host=0.0.0.0 --php_executable_path=~/.phpenv/shims/php-cgi helloworld/
http://localhost:8080/ をブラウザで開くとサンプルアプリの画面が表示されます。
サンプルアプリのアップロード
サインアップ
Google アカウントにログインして下記のページを表示します。
「Create Application」ボタンをクリックします。
携帯認証の画面になるので、携帯のメールアドレスを入力して「確認コードを送信」をクリックします。
携帯に送信された確認コードを入力して「確認」をクリックします。
「Create an Application」というページが表示されるのでアプリケーションの情報を入力します。
アプリの登録
Application Identifier
アプリケーションIDを指定します。APPID.appspot.com
のようにアプリケーションのドメイン名として使われます。
一度登録すると変更不可能で、削除すると同じ識別子は二度と使えなくなるので慎重に・・・
Application Title
管理コンソールなどで表示されるアプリケーションのタイトルです。 管理コンソールからいつでも変更できます。
Authentication Options
アプリケーションで認証をする場合の認証方法を選択します。 デフォルトのままで OK です。
デプロイ
まずはアプリケーションの app.yaml
の application
の部分を↑で設定したアプリケーションIDの値に書き換えます。
app.yaml
application: ngyuki-helloworld :
SDK の appcfg.py でアプリをデプロイします。
google_appengine/appcfg.py update helloworld
途中で Google アカウントのメールアドレスとパスワードが聞かれるので入力します。
http://APPID.appspot.com/ のような URL を開くとアプリの画面が表示されます。
Using the Users Service
Google の Users サービスを使って認証してみます。
helloworld.php
<?php require_once 'google/appengine/api/users/UserService.php'; use google\appengine\api\users\User; use google\appengine\api\users\UserService; $user = UserService::getCurrentUser(); if ($user) { echo 'Hello, ' . htmlspecialchars($user->getNickname()); } else { header('Location: ' . UserService::createLoginURL($_SERVER['REQUEST_URI'])); }
SDK でアプリをローカルで実行するとダミーの認証フォームが現れます。
アプリを GAE にアップロードすれば、本当の Google アカウントとの統合ができます。
Using Static Files
静的ファイルを使う方法です。まずはアプリの設定ファイルを次のように修正します。
app.yaml
application: ngyuki-helloworld version: 1 runtime: php api_version: 1 handlers: - url: /css static_dir: css - url: /.* script: helloworld.php
スタイルシートを作成します。
body { font-family: Verdana, Helvetica, sans-serif; background-color: #DDDDDD; }
PHP ファイルを修正します。
helloworld.php
<html> <head> <title>sample</title> <link type="text/css" rel="stylesheet" href="/css/style.css" /> </head> <body> <?php echo "Date: " . date('H:i:s'); ?> </body> </html>
デプロイしてアプリの URL を開くと css が静的なファイルとして参照されてスタイルが適用されます。
google_appengine/appcfg.py update helloworld
phpinfo
phpinfo を表示しようとすると次のようなエラーになります。
Warning: phpinfo() has been disabled for security reasons. It can be re-enabled by adding it to the google_app_engine.enable_functions ini variable in your applications php.ini
Google App Engine では PHP の幾つかの関数は無効にされています。 phpversion や phpinfo は app.yaml と同じディレクトリに php.ini を次の通りに作成すれば有効にできます。
php.ini
google_app_engine.enable_functions = "phpversion, phpinfo"
さいごに
Google Cloud SQL が有料プランしかないので、無料枠だとたいしたこと出来なさそうです。