Appearance
PHP
PHP 语言识别策略
平台默认会根据源码根目录是否有index.php
文件或者 composer.json
来识别为 PHP 项目.
平台编译运行机制
- 预编译处理会探测是否定义了启动命令配置文件 Procfile ,如果未定义会生成默认 War 包启动配置文件;
- 预编译处理完成后,会根据语言类型选择 PHP 的 buildpack 去编译项目.在编译过程中会安装定义的 PHP 版本,安装相关依赖包;
- 编译完成后会检查是否在平台设置了 Procfile 参数,若配置了会重写启动命令配置文件 Procfile.
安装依赖包,解决依赖关系
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
shell hook 支持
通过配置 composer.json
进行 shell hook 对调用
{
"scripts": {
"pre-install-cmd": ["bash ./pre-install-cmd.sh"],
"post-install-cmd": ["bash ./post-install-cmd.sh"]
},
"require": {
"php": "7.1.21",
"ext-memcached": "*"
}
}
其中 pre-install-cmd
定义内容会在 install 前执行,post-install-cmd
定义内容会在 install 后执行,定义脚本必须提前创建并赋予执行权限
PHP 项目源码规范
在此步骤中,你需要提供一个可用的 PHP 源码程序用来部署在 Rainbond 平台上,此应用程序至少需要满足如下条件:
- 本地可以正常运行的 PHP 程序
- 源码程序必须托管在 gitlab 等相关 git 或者 svn 服务上
- 源码程序根目录下必须需要存在 php 文件
- 源码程序根目录下必须存在
composer.json
,用来管理 PHP 项目的依赖,也是 Rainbond 识别为 PHP 语言的必要条件,同时文件中必须定义项目需要的 php 版本,定义方式见下文。 - 源码程序项目根目录下必须存在
composer.lock
文件 - 源码程序项目根目录下需要定义
Procfile
,用来定义程序启动方式
cProcfile 规范
如果项目未定义 Procfile 文件,平台默认会生成默认 Procfile 来运行 PHP。
# apache (默认)
web: vendor/bin/heroku-php-apache2
# nginx
web: vendor/bin/heroku-php-nginx
上述是默认 Procfile,如果需要扩展,可以自定义 Procfile。
Composer 文件
默认源码根目录需要存在 composer.json
和 composer.lock
文件, 即使应用程序没有 Composer 依赖项,它也必须至少包含一个空({})。composer.lock
其中可以通过如下命令生成
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
"config" : {
"vendor-dir": "lib/composer",
"optimize-autoloader": true
},
编译运行环境设置
平台提供了不同的 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 版本
{
"require": { "php": "5.6.35" }
}
扩展支持
PHP 5.6
在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOM,JSON,PCRE 或 PDO):
Bzip2
cURL
FPM
mcrypt
MySQL (PDO) (uses mysqlnd)
MySQLi (uses mysqlnd)
OPcache
OpenSSL
PostgreSQL
PostgreSQL (PDO)
Readline
Sockets
Zip
Zlib 以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:
BCMath (bcmath)
Calendar (calendar)
Exif (exif)
FTP (ftp)
GD (gd; with PNG, JPEG and FreeType support)
GMP (gmp)
gettext (gettext)
IMAP (imap; with SASL and Kerberos support)
intl (intl)
LDAP (ldap; with SASL support)
mbstring (mbstring)
MySQL (mysql; note that this extension is deprecated since PHP 5.5, please migrate to MySQLi or PDO)
PCNTL (pcntl)
Shmop (shmop)
SOAP (soap)
SQLite3 (sqlite3)
SQLite (PDO) (pdo_sqlite)
XMLRPC (xmlrpc)
XSL (xsl) 可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):
APCu (apcu; provides an apc extension for compatibility with * legacy software)
Blackfire (blackfire)
Cassandra (cassandra)
ev (ev)
event (event)
ImageMagick (imagick)
memcached (memcached; built against a version of libmemcached * with SASL support)
Mongo (mongo)
MongoDB (mongodb)
New Relic (newrelic; will automatically be enabled when the New * Relic Add-On is detected during a build)
OAuth (oauth)
Phalcon (phalcon)
pq (pq)
rdkafka (rdkafka)
PHPRedis (redis)
PHP 7.0
在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOM,JSON,PCRE 或 PDO):
Bzip2
cURL
FPM
MySQL (PDO) (uses mysqlnd)
MySQLi (uses mysqlnd)
OPcache
OpenSSL
PostgreSQL
PostgreSQL (PDO)
Readline
Sockets
Zip
Zlib 以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:
BCMath (bcmath)
Calendar (calendar)
Exif (exif)
FTP (ftp)
GD (gd; with PNG, JPEG and FreeType support)
GMP (gmp)
gettext (gettext)
IMAP (imap; with SASL and Kerberos support)
intl (intl)
LDAP (ldap; with SASL support)
mbstring (mbstring)
mcrypt (mcrypt)
PCNTL (pcntl)
Shmop (shmop)
SOAP (soap)
SQLite3 (sqlite3)
SQLite (PDO) (pdo_sqlite)
XMLRPC (xmlrpc)
XSL (xsl) 可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):
APCu (apcu; provides an apc extension for compatibility with * legacy software)
Blackfire (blackfire)
Cassandra (cassandra)
ev (ev)
event (event)
ImageMagick (imagick)
memcached (memcached; built against a version of libmemcached * with SASL support)
MongoDB (mongodb)
New Relic (newrelic; will automatically be enabled when the New * Relic Add-On is detected during a build)
OAuth (oauth)
Phalcon (phalcon)
pq (pq)
rdkafka (rdkafka)
PHPRedis (redis)
PHP 7.1
在 Rainbond 上自动启用以下内置扩展(此列表不包括默认情况下 PHP 启用的扩展,例如 DOM,JSON,PCRE 或 PDO):
Bzip2
cURL
FPM
MySQL (PDO) (uses mysqlnd)
MySQLi (uses mysqlnd)
OPcache
OpenSSL
PostgreSQL
PostgreSQL (PDO)
Readline
Sockets
Zip
Zlib 以下内置扩展已经构建为“共享”,可以通过 composer.json(括号中给出的内部标识符名称)启用:
BCMath (bcmath)
Calendar (calendar)
Exif (exif)
FTP (ftp)
GD (gd; with PNG, JPEG and FreeType support)
GMP (gmp)
gettext (gettext)
IMAP (imap; with SASL and Kerberos support)
intl (intl)
LDAP (ldap; with SASL support)
mbstring (mbstring)
mcrypt (mcrypt)
PCNTL (pcntl)
Shmop (shmop)
SOAP (soap)
SQLite3 (sqlite3)
SQLite (PDO) (pdo_sqlite)
XMLRPC (xmlrpc)
XSL (xsl) 可以通过 composer.json 启用以下第三方扩展(括号中给出的内部标识符名称):
APCu (apcu; provides an apc extension for compatibility with * legacy software)
Blackfire (blackfire)
Cassandra (cassandra)
ev (ev)
event (event)
ImageMagick (imagick)
memcached (memcached; built against a version of libmemcached * with SASL support)
MongoDB (mongodb)
New Relic (newrelic; will automatically be enabled when the New * Relic Add-On is detected during a build)
OAuth (oauth)
Phalcon (phalcon)
pq (pq)
rdkafka (rdkafka)
PHPRedis (redis) 示例 demo 程序 示例https://github.com/goodrain/php-demo
推荐阅读 自定义 Web Server 与 PHP 环境 Procfile 文件说明