[TOC]
#### **语言识别**
代码的根目录下必须有 index.php 或者 composer.json 文件。
>[info] 如果根目录存在 composer.lock文件会优化读取composer.lock的配置,忽略掉 composer.json,需删除composer.phar
#### **支持版本**
平台提供了不同的PHP版本,您可以使用PHP,HHVM 或者同时使用它们。
**支持的版本:**
* **PHP 5.4** (5.4.40)
* **PHP 5.5** (5.5.26)
* **PHP 5.6** (5.6.11)
* **PHP 7.0** (7.0.16)
* **PHP 7.1** (7.1.2)
**可选的版本:**
**HHVM (3.2.0, 3.3.1, 3.3.4,3.4.2,3.5.0,3.5.1)**
**选择PHP版本:**
有两种方式指定PHP版本:
* 通过应用创建向导来完成
* 通过配置`composer.json`文件来实现,下面介绍配置方法。
在用户代码的根目录创建`composer.json`文件,指定使用`PHP 5.5.26`版本,文件具体内容如下:
{
"require": {"php": "5.5.26"}
}
以下`composer.json`配置会使用`HHVM 3.2`版本:
{
"require": {"hhvm": "3.2"}
}
>#### **提示**
PHP 的版本支持 ~5.5.16 这种 [Semantic Versioning](http://semver.org/) 的形式,如果用户指定~5.5.16系统会从平台中选择5.5分支版本最高的版本,但不会使用5.6.*,因此会选择5.5.26版本。
#### **扩展**
- 通过应用创建向导,可以在高级选项页手动勾选启动内置未启动扩展。
- 通过composer.json里添加相关配置。
##### **PHP 5.5 和 5.6**
以下的内置扩展会自动开启,这个列表没有包含 PHP 可使用的全部扩展,例如 [DOM](http://docs.php.net/dom),[JSON](http://docs.php.net/json),[PCRE](http://docs.php.net/pcre),[PDO](http://docs.php.net/pdo),其它的内置扩展可以通过配置 composer.json 来开启,参考下面的 可选扩展 章节。
* [Bzip2](http://docs.php.net/bzip2)
* [cURL](http://docs.php.net/curl)
* [FPM](http://docs.php.net/fpm)
* [mcrypt](http://docs.php.net/mcrypt)
* [MySQL(PDO)](http://docs.php.net/pdo_mysql) (使用 [mysqlnd](http://docs.php.net/mysqlnd))
* [MySQLi](http://docs.php.net/mysqli) (使用 [mysqlnd](http://docs.php.net/mysqlnd))
* [OPcache](http://docs.php.net/opcache)
* [OpenSSL](http://docs.php.net/openssl)
* [PostgreSQL](http://docs.php.net/pgsql)
* [PostgreSQL(PDO)](http://docs.php.net/pdo_pgsql)
* [Readline](http://docs.php.net/readline)
* [Sockets](http://docs.php.net/sockets)
* [Zip](http://docs.php.net/zip)
* [Zib](http://docs.php.net/zlib)
#### **内置扩展**
以下内置扩展默认没有开启,可以通过 composer.json 开启(包名已在括号内给出):
* [BCMath](http://docs.php.net/bcmath)(bcmath)
* [Calendar](http://docs.php.net/calendar)(calendar)
* [Exif](http://docs.php.net/exif)(exif)
* [FTP](http://docs.php.net/ftp)(ftp)
* [GD](http://docs.php.net/manual/en/book.image.php)(gd)
* [gettext](http://docs.php.net/gettext)(gettext)
* [intl](http://docs.php.net/intl)(intl)
* [mbstring](http://docs.php.net/mbstring)(mbstring)
* [MySQL](http://docs.php.net/book.mysql)(mysql,注意,该扩展已经在php 5.5中废弃,推荐使用 MySQLi 或 PDO)
* [PCNTL](http://docs.php.net/pcntl)(pcntl)
* [Shmop](http://docs.php.net/shmop)(shmop)
* [SOAP](http://docs.php.net/soap)(soap)
* [SQLite3](http://docs.php.net/sqlite3)(sqlite3)
* [SQLite](http://docs.php.net/pdo_sqlite)(PDO)(pdo_sqlite)
* [XMLRPC](http://docs.php.net/xmlrpc)(xmlrpc)
* [XSL](http://docs.php.net/xsl)(xsl)
#### **可选扩展**
通过在 composer.json 内添加配置可以声明可选扩展,只需要在对应扩展的包名前加上 ext- 前缀,以下是使用 bcmath, Memcached, MongoDB 和 XSL 的例子:
{
"require": {
"ext-bcmath": "*",
"ext-memcached": "*",
"ext-mongo": "*",
"ext-xsl": "*"
}
}
> **提示**: composer.json 是 PHP 的依赖管理器 composer 的配置文件,强烈推荐使用 “*” 来标识依赖包的版本号。
#### **第三方扩展**
以下第三方扩展可以通过 composer.json 开启(包名已在括号内给出):
* [APCu(apcu)](http://pecl.php.net/package/apcu)(apcu)
* [ImageMagick(imagick)](http://docs.php.net/imagick)(imagick)
* [memcached](http://docs.php.net/memcached)(memcached)
* [MongoDB](http://docs.php.net/mongo)(mongo)
* [New Relic](http://newrelic.com/php)(newrelic)
* [PHPRedis](http://pecl.php.net/package/redis)(redis)
* [Yaf](http://pecl.php.net/package/yaf)(yaf)
* [Phalcon](http://phalconphp.com/)(phalcon)
>**注意**: HHVM 暂时不支持自定义扩展
##### **PHP 7.0和7.1**
官方出品过2个mongodb的扩展,一个叫mongo,一个是mongodb,前者已经被官方废弃,不再提供稳定的更新,官方推荐使用后者,并且后者是支持php7的。
所以在使用mongodb扩展时,需要在composer.json中指定扩展为mongodb。
```
{
"require": {
"php": "~7.1.2",
"ext-memcached": "*",
"ext-mongodb": "*",
"ext-mbstring": "*"
}
}
```
#### **构建**
系统会运行以下命令来解决依赖:
composer install --no-dev --prefer-dist --optimize-autoloader --no-interaction
>提示:Composer 会在每次运行的时候使用 self-update 自动更新到最新版本
#### **Web 服务器**
支持 [Apache](http://httpd.apache.org/) 和 [Nginx](http://nginx.org/) 两种 Web 服务器,如果代码根目录没有 Procfile 文件,应用创建向导会提示用户选择Apache或Nginx作为Web Server,否则遵循用户定义的Procfile文件设置。
**Apache**
Apache 可以使用 mod_proxy+fcgi 连接 PHP-FPM 或 HHVM。
创建 Procfile 文件为下面的内容来开启 PHP-FPM:
web: vendor/bin/heroku-php-apache2
如果要运行 HHVM 的话,Procfile 内容如下:
web: vendor/bin/heroku-hhvm-apache2
你可以通过 .htaccess 文件来自定义 Apache 的行为,也可以使用自定义 Apache 配置文件的方式,例如:
将以下内容保存为 apache_app.conf:
~~~
RewriteEngine On
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) - [E=BASE:%1]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/app.php [L]
~~~
然后修改 Procfile 文件加载此配置:
web: vendor/bin/heroku-php-apache2 -C apache_app.conf
**Nginx**
Nginx 使用 FastCGI 连接 PHP-FPM,使用下面的 Procfile 开启 Nginx:
web: vendor/bin/heroku-php-nginx
如果要运行 HHVM 的话,Procfile 内容如下:
web: vendor/bin/heroku-hhvm-nginx
Nginx 服务器同样支持自定义配置,以下是一个 URL 重写的例子:
~~~
location / {
# try to serve file directly, fallback to rewrite
try_files $uri @rewriteapp;
}
location @rewriteapp {
# rewrite all to app.php
rewrite ^(.*)$ /app.php/$1 last;
}
location ~ ^/(app|app_dev|config)\.php(/|$) {
fastcgi_pass heroku-fcgi;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
}
~~~
将其保存为 nginx_app.conf 接着修改 Procfile 文件为以下内容即可:
web: vendor/bin/heroku-php-nginx -C nginx_app.conf
- 介绍
- 从这里开始
- 注册
- 登陆
- 云帮界面
- 功能介绍
- 新增应用
- 从镜像
- 从源码
- 应用市场
- 应用框架
- 我的应用
- 界面介绍
- 应用控制台
- 概览
- 依赖
- 监控
- 日志
- 设置
- 费用
- 端口
- 存储
- 扩容
- 总览
- 团队
- 财务中心
- 帐户充值
- 应用扣费
- 批量续费
- 语言支持
- 概述
- Java
- java-maven
- java-war
- java-jar
- web程序部署
- 使用Webapp Runner部署
- 使用Jetty Runner部署
- 示例代码
- gradle
- Scala
- play
- Ruby
- 语言支持
- ruby应用部署
- Rails 应用概述
- 部署Rails3.x应用
- 使用Puma 部署 Rails 应用
- 示例代码
- Python
- 语言支持
- Web框架支持
- 示例代码
- PHP
- 平台特性
- 语言支持
- 运行环境设置与调优
- 部署ThinkPHP框架程序
- 示例代码
- Go
- 语言支持
- 部署Beego等框架程序
- 示例代码
- Node.JS
- 语言支持
- 示例代码
- Html
- 语言支持
- 示例代码
- Dockerfile
- 语言支持
- 示例代码
- 相关文档
- Procfile
- Cron计划任务
- 参考知识
- 好雨Gogs使用说明
- Artifactory对接本地仓库
- 好雨如何对接Git Server
- Git使用技巧
- 服务框架支持
- dubbo
- springcloud
- 技术支持