Google Cloud 上的 PHP Web 应用
演示了 Google Cloud 对 PHP 的实验性支持。
介绍
本文旨在演示 Google Cloud 中最近宣布的 PHP 实验性支持。感谢 Google 允许我访问此尚未在 Google App Engine 上公开提供的技术栈。我利用一个周日快速整理了这篇文章,以帮助希望在 Google Cloud (Google App Engine) 上使用 PHP 的技术人员,它是一个优雅且可靠的 PaaS 平台,可用于托管 WebApp。一些 Google Cloud 的经验会有帮助,但并非强制要求。
- 源代码:@ GitHub - https://github.com/bhavik1st/php-4-gae
- 实时演示:@ Google Cloud - http://php-4-gae.appspot.com/
背景
在过去的十年里,Web 技术不断涌现新的趋势。PHP 是一项经得起时间考验的技术。尽管看起来 PHP 正在失去其魔力,随着 Node.js 和 Ruby 等新技术的稳步发展,它仍然非常庞大。这正是 Google 和 Microsoft 不得不在其云产品中支持 PHP 的原因。Microsoft 在 Azure 仍处于 Beta 阶段时就意识到了这一点。我甚至还写了一个简单的自定义 PHP 博客引擎运行在 Microsoft Azure 上。(这是 Microsoft India 于 2009 年组织的 thecloudapp.com 竞赛中 PHP 类别的获胜者)。
然而,Google Cloud (PaaS) 最初坚持使用 Python,随后是 Java 和 Go 语言。最近,Google 宣布了对 PHP 的实验性支持。对我来说,这是亡羊补牢。这为 PHP 爱好者提供了一个绝佳的机会,并可能成为 Google Cloud 的游戏规则改变者。我相信 Google 将尽快向所有人开放这项服务。目前,如果您在此处请求,Google 可能会允许您启用 PHP 应用程序部署到 App Engine。
第一步:设置
要做的第一件事是为 Google Cloud 设置您的开发环境。只需下载并安装 Google App Engine SDK 和 PHP(在我这里是 GoogleAppEngine-1.8.3.msi 和 php-5.4.17-Win32-VC9-x86.zip)。如果您将 Java 用于 GAE,使用 Eclipse 作为 IDE 会有所帮助,但在此情况下并非必需。您操作系统的相关说明可在此处找到。
第二步:创建
缺乏清晰的文档使得应用程序的创建变得有些棘手。第一步是创建一个 Python Google Cloud 应用,或者直接从 SDK 中获取示例应用。它包含一个配置文件 app.yaml。我们只需要修改几行即可将其变为 PHP Web 应用。
1. 将 python 替换为 php。
runtime: php
2. 替换 PHP 文件的处理程序。注意如何指定静态文件。
handlers:
- url: /css
static_dir: css
- url: /js
static_dir: js
- url: /fonts
static_dir: fonts
- url: /assets
static_dir: assets
- url: /shortener
script: shortener.php
- url: /phpinfo
script: phpinfo.php
- url: /.*
script: index.php
3. 在根文件夹中创建 php.ini 文件,用于您可能想要使用的一些受限功能。
; php.ini
google_app_engine.enable_functions = "php_sapi_name, php_uname, phpinfo"
第三步:实现
编写您的 PHP Web 应用。在此我编写了一个简单的基于 Twitter BootStrap 3.0 的 PHP Web 应用,演示了如何从 PHP 调用 Google API。虽然在生产环境中我不会这样使用 Bootstrap,但这是最快的方式,可以快速获得基于 HTML5 和 JQuery 的响应式 UI,从而以美观的方式在 PC、平板电脑和手机上显示。请注意,某些功能在 Google Cloud 上将无法正常工作,例如 phpinfo()、文件系统访问等。然而,用户可以自由使用 Google Cloud Storage。此 PHP Web 应用的代码可供下载。
这是我的 Web 应用在桌面上的样子
这是同一个 Web 应用在手机上的样子(感谢 Twitter BootStrap 的响应式 HTML5!)
第四步:调用 Google API
目前演示调用了 Google 的出色 URL 缩短 API。使用的 PHP 代码再简单不过了。要能够使用 Google API,您需要从此处下载并使用 Google PHP Client Library。然而,正常使用和在 Google Cloud 上使用之间存在一个主要区别,因为我们在 Google Cloud 上无法使用 FileSystem Cache 和 CURL。要在 Google Cloud 上使用 Google API,您需要在 google-api-php-client\src\config.php 中更改以下行。(如果没有这个博客,调试起来会很困难——非常感谢!)
// In google-api-php-client\src\config.php
'authClass' => 'Google_OAuth2',
'ioClass' => 'Google_HttpStreamIO',
'cacheClass' => 'Google_MemcacheCache',
// We need to configure fake values for memcache to work
'ioMemCacheCache_host' => 'does_not_matter',
'ioMemCacheCache_port' => '37337',
这尤其令人困扰,因为我的文件系统上没有 memcache,我不得不切换 `'cacheClass' => 'Google_FileCache'`(本地测试)和 `'cacheClass' => 'Google_MemcacheCache'`(Google Cloud 生产)。
URL 缩短逻辑非常简单,如下所示
// shortener.php
$client = new Google_Client();
$service = new Google_UrlshortenerService($client);
if (isset($_GET['url']))
{
// Start to make API requests.
$url = new Google_Url();
$url->longUrl = $_GET['url'];
//Shorten URL
$shortUrl = $service->url->insert($url);
}
PHP 王国里的“Hello World”就像这样简单
<?php
//phpinfo.php
phpinfo();
?>
运行 Web 应用
在本地运行 Web 应用非常简单。从根文件夹(在此情况下为 php-4-gae)外面运行此命令。
C:\eclipse\workspace>dev_appserver.py --php_executable_path=C:\php\php-cgi.exe php-4-gae
要上传到 Google Cloud,请运行此命令(可能会提示您输入登录 ID 和密码)。
C:\eclipse\workspace>appcfg.py update php-4-gae
笔记
- 2013年8月31日:周末上传了第一稿。
如果下个周末我有一些空闲时间,我希望发布下一篇文章,使用像 CodeIgnitor 这样的流行框架构建基于 PHP 和 Google Cloud 的 REST API。也许还会在演示中添加一些 Google API 调用。