PHP
PHP语言识别策略
平台默认会根据源码根目录是否有index.php 文件或者 composer.json来识别为PHP项目.
平台编译运行机制
- 预编译处理会探测是否定义了启动命令配置文件Procfile,如果未定义会生成默认War包启动配置文件;
- 预编译处理完成后,会根据语言类型选择PHP的buildpack去编译项目.在编译过程中会安装定义的PHP版本,安装相关依赖包;
- 编译完成后会检查是否在平台设置了Procfile参数,若配置了会重写启动命令配置文件Procfile.
# 安装依赖包,解决依赖关系
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
PHP项目源码规范
在此步骤中,你需要提供一个可用的PHP源码程序用来部署在Rainbond平台上,此应用程序至少需要满足如下条件:
- 本地可以正常运行的PHP程序
- 源码程序必须托管在gitlab等相关git或者svn服务上
- 源码程序根目录下必须需要存在php文件
- 源码程序根目录下必须存在
composer.json,用来管理PHP项目的依赖,也是Rainbond识别为PHP语言的必要条件,同时文件中必须定义项目需要的php版本,定义方式见下文。 - 源码程序项目根目录下必须存在
composer.lock文件 - 源码程序项目根目录下需要定义
Procfile,用来定义程序启动方式
Procfile规范
如果项目未定义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.5.35 这种 Semantic Versioning 的形式,如果用户指定~5.5.35系统会从平台中选择5.5分支版本最高的版本,因此会选择5.5.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