随着Web技术的不断演进,新的技术趋势层出不穷。PHP作为一种历史悠久的技术,尽管面临着Node.js和Ruby等新兴技术的挑战,但依然保持着其重要地位。这也正是为什么Google和Microsoft等云服务提供商不得不在其云服务中支持PHP的原因。Google Cloud(PaaS)最初只支持Python,随后加入了Java和Go语言。最近,Google宣布了对PHP的实验性支持,这对于PHP爱好者来说是一个极好的机会,也可能成为Google Cloud的转折点。相信Google很快就会向所有人开放这项服务。目前,Google可能会允许请求启用PHP应用程序部署到App Engine。
本文旨在帮助那些希望在Google Cloud(Google App Engine)上使用PHP的技术人员。Google Cloud是一个优雅且可靠的PaaS,用于托管Web应用。虽然有一定的Google Cloud使用经验会有所帮助,但并非必需。
在过去的十年里,见证了Web技术领域的新趋势不断涌现。PHP作为一种历史悠久的技术,尽管面临着Node.js和Ruby等新兴技术的挑战,但依然保持着其重要地位。这也正是为什么Google和Microsoft等云服务提供商不得不在其云服务中支持PHP的原因。Google Cloud(PaaS)最初只支持Python,随后加入了Java和Go语言。最近,Google宣布了对PHP的实验性支持,这对于PHP爱好者来说是一个极好的机会,也可能成为Google Cloud的转折点。相信Google很快就会向所有人开放这项服务。目前,Google可能会允许请求启用PHP应用程序部署到App Engine。
要开始在Google Cloud上使用PHP,首先需要设置开发环境。简单地下载并安装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的URL缩短API。使用的PHP代码非常简单。要能够使用Google API,需要下载并使用Google PHP客户端库。然而,在Google Cloud上使用与正常使用有一个主要区别,因为不能使用文件系统缓存和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',
This is particularly troublesome as I did not memcache on my filesystem I had to switch between
'cacheClass' => 'Google_FileCache' (Local Testing) and
'cacheClass' => 'Google_MemcacheCache' (Google Cloud Production).
URL Shortening Logic is as simple as
$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);
}
The "Hello World" of PHP Kingdom is as simple as
phpinfo();
在本地运行Web应用非常简单。从根目录(在本例中为php-4-gae)外部运行此命令:
C:\eclipse\workspace>dev_appserver.py --php_executable_path=C:\php\php-cgi.exe php-4-gae
C:\eclipse\workspace>appcfg.py update php-4-gae