PHP

PHP 语言识别策略

平台默认会根据源码根目录是否有index.php 文件或者 composer.json来识别为 PHP 项目.

平台编译运行机制

  1. 预编译处理会探测是否定义了启动命令配置文件 Procfile ,如果未定义会生成默认 War 包启动配置文件;
  2. 预编译处理完成后,会根据语言类型选择 PHP 的 buildpack 去编译项目.在编译过程中会安装定义的 PHP 版本,安装相关依赖包;
  3. 编译完成后会检查是否在平台设置了 Procfile 参数,若配置了会重写启动命令配置文件 Procfile.
  1. # 安装依赖包,解决依赖关系
  2. composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction

shell hook 支持

通过配置 composer.json 进行 shell hook 对调用

  1. {
  2. "scripts": {
  3. "pre-install-cmd": ["bash ./pre-install-cmd.sh"],
  4. "post-install-cmd": ["bash ./post-install-cmd.sh"]
  5. },
  6. "require": {
  7. "php": "7.1.21",
  8. "ext-memcached": "*"
  9. }
  10. }

其中 pre-install-cmd 定义内容会在 install 前执行,post-install-cmd 定义内容会在 install 后执行,定义脚本必须提前创建并赋予执行权限

PHP 项目源码规范

在此步骤中,你需要提供一个可用的 PHP 源码程序用来部署在 Rainbond 平台上,此应用程序至少需要满足如下条件:

  1. 本地可以正常运行的 PHP 程序
  2. 源码程序必须托管在 gitlab 等相关 git 或者 svn 服务上
  3. 源码程序根目录下必须需要存在 php 文件
  4. 源码程序根目录下必须存在 composer.json,用来管理 PHP 项目的依赖,也是 Rainbond 识别为 PHP 语言的必要条件,同时文件中必须定义项目需要的 php 版本,定义方式见下文。
  5. 源码程序项目根目录下必须存在 composer.lock 文件
  6. 源码程序项目根目录下需要定义 Procfile ,用来定义程序启动方式
Procfile 规范

如果项目未定义 Procfile 文件,平台默认会生成默认 Procfile 来运行 PHP。

  1. # apache (默认)
  2. web: vendor/bin/heroku-php-apache2
  3. # nginx
  4. web: vendor/bin/heroku-php-nginx

上述是默认 Procfile,如果需要扩展,可以自定义 Procfile。

Composer 文件

默认源码根目录需要存在 composer.jsoncomposer.lock 文件, 即使应用程序没有 Composer 依赖项,它也必须至少包含一个空({})。composer.lock 其中可以通过如下命令生成

  1. composer update --ignore-platform-reqs

PHP 应用程序可以使用 Composer 安装的依赖项,通常会将依赖项安装到 vendor/ 目录,但是部分项目会重新定义这个目录,执行 composer config vendor-dir 配置正确的路径。大多数情况下避免本地安装影响,通常需要将 Composer vendor 目录添加到你的 .gitignore 当在 composer.json 中定义了 verndor-dir 时需注意,需要自行定义 Procfile 否则会导致应用无法正常运行,Procfile 格式类似 web: <vendor-dir>/heroku/heroku-buildpack-php/bin/heroku-php-apache2

  1. "config" : {
  2. "vendor-dir": "lib/composer",
  3. "optimize-autoloader": true
  4. },

编译运行环境设置

平台提供了不同的 PHP 版本,您可以使用 PHP,HHVM(PHP 代码编译器),或者同时使用二者,通过 HHVM 提高 PHP 性能。

PHP 版本支持
  • PHP 5.5.38 (5.5.38)
  • PHP 5.6.35 (5.6.35)
  • PHP 7.0.29 (7.0.29)
  • PHP 7.1.16 (7.1.16)

可以通过 composer.json 文件来指定上述支持的 PHP 或 HHVM 版本

  1. {
  2. "require": { "php": "5.6.35" }
  3. }

PHP 的版本支持 ~5.5.35 这种 Semantic Versioning 的形式,如果用户指定~5.5.35 系统会从平台中选择 5.5 分支版本最高的版本,因此会选择 5.5.35 版本。

扩展支持

PHP 5.6

在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOMJSONPCREPDO):

以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:

可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):

PHP 7.0

在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOMJSONPCREPDO):

以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:

可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):

PHP 7.1

在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOMJSONPCREPDO):

以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:

可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):

示例 demo 程序

示例https://github.com/goodrain/php-demo

推荐阅读

自定义 Web Server 与 PHP 环境 Procfile 文件说明