文字

语言识别

代码的根目录下必须有 index.php 或者 composer.json 文件。

如果根目录存在 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 的形式,如果用户指定~5.5.16系统会从平台中选择5.5分支版本最高的版本,但不会使用5.6.*,因此会选择5.5.26版本。

扩展

  • 通过应用创建向导,可以在高级选项页手动勾选启动内置未启动扩展。
  • 通过composer.json里添加相关配置。
PHP 5.5 和 5.6

以下的内置扩展会自动开启,这个列表没有包含 PHP 可使用的全部扩展,例如 DOM,JSON,PCRE,PDO,其它的内置扩展可以通过配置 composer.json 来开启,参考下面的 可选扩展 章节。

内置扩展

以下内置扩展默认没有开启,可以通过 composer.json 开启(包名已在括号内给出):

可选扩展

通过在 composer.json 内添加配置可以声明可选扩展,只需要在对应扩展的包名前加上 ext- 前缀,以下是使用 bcmath, Memcached, MongoDB 和 XSL 的例子:

{
    "require": {
        "ext-bcmath": "*",
        "ext-memcached": "*",
        "ext-mongo": "*",
        "ext-xsl": "*"
    }
}

提示: composer.json 是 PHP 的依赖管理器 composer 的配置文件,强烈推荐使用 “*” 来标识依赖包的版本号。

第三方扩展

以下第三方扩展可以通过 composer.json 开启(包名已在括号内给出):

注意: 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 服务器

支持 ApacheNginx 两种 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
上一篇: 下一篇:
  页面正在加载中