

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Elastic Beanstalk PHP 平台
<a name="create_deploy_PHP.container"></a>

AWS Elastic Beanstalk 為不同版本的 PHP 提供和支援各種**平台分支**。這些平台支援獨立執行或在 Composer 下執行的 PHP Web 應用程式。如需支援平台分支的完整清單，*AWS Elastic Beanstalk 請參閱平台*文件中的 [PHP](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。

Elastic Beanstalk 提供[組態選項](command-options.md)，可讓您自訂在 Elastic Beanstalk 環境中的 Amazon EC2 執行個體上執行的軟體。您可以設定應用程式所需的[環境變數](environments-cfg-softwaresettings.md#environments-cfg-softwaresettings-console)，啟用 Amazon S3 的日誌輪換，將包含靜態檔案的應用程式來源中的資料夾映射到代理伺服器提供的路徑，並進行常見 PHP 初始化設定。

Elastic Beanstalk 主控台中提供了[修改正在執行環境組態](environment-configuration-methods-after.md)的組態選項。要避免在終止環境的組態時遺失組態，您可以使用[已儲存組態](environment-configuration-savedconfig.md)來儲存您的設定，並在之後套用至另一個環境。

若要將設定儲存於原始程式碼，您可以包含[組態檔案](ebextensions.md)。每次您建立環境或部署應用程式，組態檔案裡的設定就會套用。您也可以使用組態檔案來安裝套件、執行指令碼，並在部署期間執行其他執行個體自訂操作。

若使用 Composer，您可將 [`composer.json` 檔案納入](#php-configuration-composer)您的原始碼套件，藉此於部署期間安裝套件。

以未做為組態選項提供的進階 PHP 組態和 PHP 設定而言，您可以[使用組態檔案來提供 `INI` 檔案](#php-configuration-phpini)，以此擴展並覆寫 Elastic Beanstalk 套用的預設設定，或以此安裝其他延伸模組。

在 Elastic Beanstalk 主控台中套用的設定會覆寫組態檔案中相同的設定 (如存在)。這可讓您在組態檔案中擁有預設設定，並以主控台的環境專屬設定覆寫之。如需優先順序以及其他變更設定方法的詳細資訊，請參閱[組態選項](command-options.md)。

如需各種擴充 Elastic Beanstalk Linux 類型平台方式的詳細資訊，請參閱 [擴充 Elastic Beanstalk Linux 平台](platforms-linux-extend.md)。

**Topics**
+ [安裝適用於 PHP 的 AWS SDK](#php-development-environment-sdk)
+ [PHP 8.1 on Amazon Linux 2 注意事項](#php-8-1-considerations)
+ [設定您的 PHP 環境](#php-console)
+ [組態的命名空間](#php-namespaces)
+ [安裝相依項目](#php-configuration-composer)
+ [更新 Composer](#php-configuration-composerupdate)
+ [擴展 php.ini](#php-configuration-phpini)

## 安裝適用於 PHP 的 AWS SDK
<a name="php-development-environment-sdk"></a>

如果您需要從應用程式中管理 AWS 資源，請安裝 適用於 PHP 的 AWS SDK。例如，透過適用於 PHP 的開發套件，您可以使用 Amazon DynamoDB (DynamoDB) 來存放使用者和工作階段資訊，無須建立關聯式資料庫。

使用 Composer 安裝適用於 PHP 的 SDK

```
$ composer require aws/aws-sdk-php
```

如需詳細資訊，請參閱 [AWS SDK for PHP](https://aws.amazon.com/sdk-for-php/) 首頁。如需說明，請參閱[安裝 AWS SDK for PHP](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/getting-started_installation.html)。

## PHP 8.1 on Amazon Linux 2 注意事項
<a name="php-8-1-considerations"></a>

如果使用的是 *PHP 8.1 on Amazon Linux 2* 平台分支，請閱讀本節。

### PHP 8.1 on Amazon Linux 2 注意事項
<a name="php-8-1-considerations-detail"></a>

**注意**  
本主題中的資訊僅適用於 *PHP 8.1 on Amazon Linux 2* 平台分支。不適用於基於 AL2023 的 PHP 平台分支。也不適用於 *PHP 8.0 Amazon Linux 2* 平台分支。

Elastic Beanstalk 會將 EC2 執行個體上 *PHP 8.1 on Amazon Linux 2* 平台分支的 PHP 8.1 相關 RPM 套件儲存在本機目錄中，而不是 Amazon Linux 儲存庫中。您可以使用 **rpm -i ** 來安裝套件。從 [PHP 8.1 平台版本 3.5.0](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2022-10-03-linux.html) 開始，Elastic Beanstalk 會將與 PHP 8.1 有關的 RPM 套件儲存在以下本機 EC2 目錄中。

 `/opt/elasticbeanstalk/RPMS` 

以下範例會安裝 *php-debuginfo* 套件。

```
$rpm -i /opt/elasticbeanstalk/RPMS/php-debuginfo-8.1.8-1.amzn2.x86_64.rpm
```

套件名稱中的版本會因 EC2 本機目錄 `/opt/elasticbeanstalk/RPMS` 中所列的實際版本而有所不同。使用相同的語法來安裝其他 PHP 8.1 RPM 套件。

展開以下區塊，顯示我們提供的 RPM 套件清單。

#### RPM 套件
<a name="php-8-1-considerations-detail-rpm-packages"></a>

以下清單提供 Elastic Beanstalk PHP 8.1 平台在 Amazon Linux 2 上提供的 RMP 套件。這些位於本機目錄 `/opt/elasticbeanstalk/RPMS` 中。

列示套件名稱中的版本編號 *8.1.8-1* 和 *3.7.0-1* 僅為範例。
+ `php-8.1.8-1.amzn2.x86_64.rpm`
+ `php-bcmath-8.1.8-1.amzn2.x86_64.rpm`
+ `php-cli-8.1.8-1.amzn2.x86_64.rpm`
+ `php-common-8.1.8-1.amzn2.x86_64.rpm`
+ `php-dba-8.1.8-1.amzn2.x86_64.rpm`
+ `php-dbg-8.1.8-1.amzn2.x86_64.rpm`
+ `php-debuginfo-8.1.8-1.amzn2.x86_64.rpm`
+ `php-devel-8.1.8-1.amzn2.x86_64.rpm`
+ `php-embedded-8.1.8-1.amzn2.x86_64.rpm`
+ `php-enchant-8.1.8-1.amzn2.x86_64.rpm`
+ `php-fpm-8.1.8-1.amzn2.x86_64.rpm`
+ `php-gd-8.1.8-1.amzn2.x86_64.rpm`
+ `php-gmp-8.1.8-1.amzn2.x86_64.rpm`
+ `php-intl-8.1.8-1.amzn2.x86_64.rpm`
+ `php-ldap-8.1.8-1.amzn2.x86_64.rpm`
+ `php-mbstring-8.1.8-1.amzn2.x86_64.rpm`
+ `php-mysqlnd-8.1.8-1.amzn2.x86_64.rpm`
+ `php-odbc-8.1.8-1.amzn2.x86_64.rpm`
+ `php-opcache-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pdo-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pear-1.10.13-1.amzn2.noarch.rpm`
+ `php-pgsql-8.1.8-1.amzn2.x86_64.rpm`
+ `php-process-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pspell-8.1.8-1.amzn2.x86_64.rpm`
+ `php-snmp-8.1.8-1.amzn2.x86_64.rpm`
+ `php-soap-8.1.8-1.amzn2.x86_64.rpm`
+ `php-sodium-8.1.8-1.amzn2.x86_64.rpm`
+ `php-xml-8.1.8-1.amzn2.x86_64.rpm`
+ `php-pecl-imagick-3.7.0-1.amzn2.x86_64.rpm`
+ `php-pecl-imagick-debuginfo-3.7.0-1.amzn2.x86_64.rpm`
+ `php-pecl-imagick-devel-3.7.0-1.amzn2.noarch.rpm`

您可以使用 PEAR 和 PECL 套件來安裝常見的擴充功能。如需 PEAR 的詳細資訊，請參閱 [PEAR PHP 擴充功能和應用程式儲存庫](https://pear.php.net)網站。如需 PECL 的詳細資訊，請參閱 [PECL 擴充功能](https://pecl.php.net)網站。

以下範例命令會安裝 Memcached 擴充功能。

```
$pecl install memcache
```

或者您也可以使用以下內容：

```
$pear install pecl/memcache
```

以下範例命令會安裝 Redis 擴充功能。

```
$pecl install redis
```

或者您也可以使用以下內容：

```
$pear install pecl/redis
```

## 設定您的 PHP 環境
<a name="php-console"></a>

您可以使用 Elastic Beanstalk 主控台來啟用至 Amazon S3 的日誌輪換，設定您的應用程式可以從環境讀取的變數，並變更 PHP 設定。

**在 Elastic Beanstalk 主控台中設定 PHP 環境**

1. 開啟 [Elastic Beanstalk 主控台](https://console.aws.amazon.com/elasticbeanstalk)，然後在**區域**清單中選取您的 AWS 區域。

1. 在導覽窗格中，選擇**環境**，然後在清單中選擇您環境的名稱。

1. 在導覽窗格中，選擇**組態**。

1. 在**更新、監控和日誌記錄**組態類別中，選擇**編輯**。

### PHP 設定
<a name="php-console-settings"></a>
+ **代理伺服器** – 要在您的環境執行個體上使用的代理伺服器。預設使用 nginx。
+ **文件根目錄** – 內含您網站預設頁面的資料夾。若您的歡迎頁面並非位於原始碼套件的根目錄，請指定相對於根路徑所在的資料夾。例如，若歡迎頁面位於名為 `/public` 的資料夾，則為 `public`。
+ **記憶體限制** – 允許指令碼進行記憶體配置的容量上限。例如 `512M`。
+ **Zlib 輸出壓縮** – 設定為 `On` 以壓縮回應資料。
+ **允許 URL fopen** – 設定為 `Off` 以避免指令碼自遠端位置下載檔案。
+ **顯示錯誤** – 設定為 `On` 以顯示用於除錯的內部錯誤訊息。
+ **執行時間上限** – 指令碼於環境將其終止前可執行的時間上限 (秒)。

### 日誌選項
<a name="php-console-logs"></a>

Log Options (日誌選項) 區段有兩個設定：
+ **Instance profile (執行個體描述檔)** – 指定執行個體描述檔，此描述檔具備存取和您應用程式相關聯 Amazon S3 儲存貯體的許可。
+ **Enable log file rotation to Amazon S3** (啟用 Amazon S3 的日誌檔案輪換) – 指定是否將應用程式 Amazon EC2 執行個體的日誌檔案複製到與應用程式關聯的 Amazon S3 儲存貯體。

### 靜態檔案
<a name="php-console-staticfiles"></a>

為改善效能，您可以使用 **Static files** (靜態檔案) 區段來設定代理伺服器，以為來自 Web 應用程式一組目錄中的靜態檔案 (例如 HTML 或影像) 提供服務。對於每個目錄，您可以設定目錄映射的虛擬路徑。代理伺服器收到位於指定路徑下的檔案請求時，會直接提供檔案而非將請求路由至您的應用程式。

如需使用組態檔案或 Elastic Beanstalk 主控台設定靜態檔案的詳細資訊，請參閱[提供靜態檔案](environment-cfg-staticfiles.md)。

### 環境屬性
<a name="php-console-properties"></a>

**Environment Properties (環境屬性)** 的部分可讓您針對執行您應用程式的 Amazon EC2 執行個體，來指定其上的環境資訊設定。這些設定會以金鑰值對的形式傳到應用程式。

您的應用程式程式碼可以使用 `$_SERVER` 或 `get_cfg_var` 函數來存取環境屬性。

```
$endpoint = $_SERVER['API_ENDPOINT'];
```

如需詳細資訊，請參閱[環境變數和其他軟體設定](environments-cfg-softwaresettings.md)。

## 組態的命名空間
<a name="php-namespaces"></a>

您可以使用[組態檔案](ebextensions.md)來設定組態選項，並在部署期間執行其他的執行個體設定工作。組態選項可以是[平台特定](command-options-specific.md)選項，也可以套用至 Elastic Beanstalk 服務整體中的所有[平台](command-options-general.md)。組態選項會組織成*命名空間*。

下列命名空間會同時設定代理服務和 PHP 特定選項：
+ [`aws:elasticbeanstalk:environment:proxy:staticfiles`](command-options-general.md#command-options-general-environmentproxystaticfiles) – 設定環境代理來提供靜態檔案。您可以定義虛擬路徑到應用程式目錄的對應項目。
+ [`aws:elasticbeanstalk:environment:proxy`](command-options-specific.md#command-options-php) – 指定環境的代理伺服器。
+ [`aws:elasticbeanstalk:container:php:phpini`](command-options-specific.md#command-options-php) – 設定 PHP 特定選項。此命名空間包含 `composer_options`，無法在 Elastic Beanstalk 主控台上使用。此選項會設定透過 `composer.phar install`命令使用 Composer 安裝相依性時要使用的自訂選項。如需此命令的詳細資訊，包括可用選項，請參閱 https：//*getcomposer.org* 網站上的 [安裝](https://getcomposer.org/doc/03-cli.md#install-i)。

下列範例[組態檔案](ebextensions.md)會指定靜態檔案選項， 將名為 `staticimages` 的目錄對應至路徑 `/images`，並顯示 `aws:elasticbeanstalk:container:php:phpini` 命名空間中每個可用選項的設定：

**Example .ebextensions/php-settings.config**  

```
option_settings:
  aws:elasticbeanstalk:environment:proxy:
    ProxyServer: apache
  aws:elasticbeanstalk:environment:proxy:staticfiles:
    /images: staticimages
  aws:elasticbeanstalk:container:php:phpini:
    document_root: /public
    memory_limit: 128M
    zlib.output_compression: "Off"
    allow_url_fopen: "On"
    display_errors: "Off"
    max_execution_time: 60
    composer_options: vendor/package
```

**注意**  
`aws:elasticbeanstalk:environment:proxy:staticfiles` 命名空間未在 Amazon Linux AMI PHP 平台分支上定義 (前述的 Amazon Linux 2)。

Elastic Beanstalk 可提供許多組態選項讓您自訂環境。除了組態檔案，您也可以使用主控台、已儲存組態、EB CLI 或 AWS CLI來設定組態選項。如需詳細資訊，請參閱[組態選項](command-options.md)。

## 安裝 Elastic Beanstalk PHP 應用程式的相依性
<a name="php-configuration-composer"></a>

本主題說明如何設定應用程式來安裝其所需的其他 PHP 套件。您的應用程式可能會對其他 PHP 套件有相依性。您可以設定應用程式，以在本環境的 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體上安裝相依性。或者也可以將您應用程式的相依性加到原始碼套件內，再與應用程式一同部署。下節會介紹這兩種方式。

### 使用 Composer 檔案在執行個體上安裝相依性
<a name="php-configuration-composer.oninstances"></a>

請使用您專案來源根目錄內的 `composer.json` 檔案，使用 Composer 在您環境的 Amazon EC2 執行個體上安裝您應用程式所需的套件。

**Example composer.json**  

```
{
    "require": {
        "monolog/monolog": "1.0.*"
    }
}
```

當 `composer.json` 檔案存在時，Elastic Beanstalk 會執行 `composer.phar install` 來安裝相依性。您可於 `aws:elasticbeanstalk:container:php:phpini` 命名空間設定 [`composer_options` 選項](#php-namespaces)，藉此新增附加命令的選項。

### 在原始碼套件中加入相依性
<a name="php-configuration-composer.inbundle"></a>

如果您的應用程式擁有相當大量的相依性，安裝過程可能會花上相當長的時間。如此會增加部署和擴展方面的操作，因為每個新的執行個體上都要安裝相依性。

若要避免影響到部署時間，請在您的開發環境中使用 Composer 來解決相依性的問題，並將相依性安裝到 `vendor` 資料夾。

**將相依性加入應用程式原始碼套件**

1. 執行以下命令：

   ```
   % composer install
   ```

1. 將產生的 `vendor` 資料夾加到您應用程式來源原始碼套件的根目錄。

當 Elastic Beanstalk 找到執行個體上的 `vendor` 資料夾時，會忽略 `composer.json` 檔案 (即使存在)。接著您的應用程式會使用來自 `vendor` 資料夾的相依性。

## 在 Elastic Beanstalk 上更新 Composer
<a name="php-configuration-composerupdate"></a>

本主題說明如何設定 Elastic Beanstalk 讓 Composer 保持在最新狀態。如果您在嘗試使用 Composer 檔案安裝套件時遇到錯誤，或者無法使用最新的平台版本，則可能需要更新 Composer。在平台更新之間，您可以透過在 [`.ebextensions`](ebextensions.md) 資料夾中使用組態檔案來更新環境執行個體中的 Composer。

您可以使用下列組態來自行更新 Composer。

```
commands:
  01updateComposer:
    command: /usr/bin/composer.phar self-update {{2.7.0}}
```

下列[選項設定](command-options-general.md#command-options-general-elasticbeanstalkapplicationenvironment)會設定`COMPOSER_HOME`環境變數，以設定 Composer 快取的位置。

```
option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /home/webapp/composer-home
```

您可以在`.ebextensions`資料夾中的相同組態檔案中合併這兩個組態檔案。

**Example .ebextensions/composer.config**  

```
commands:
  01updateComposer:
    command: /usr/bin/composer.phar self-update {{2.7.0}}
    
option_settings:
  - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /home/webapp/composer-home
```

**注意**  
由於 [2024 年 2 月 22](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-02-22-al2023.html) 日 Composer 安裝的更新、AL2023 平台版本和 [2024 年 2 月 28](https://docs.aws.amazon.com/elasticbeanstalk/latest/relnotes/release-2024-02-28-al2.html) 日 AL2 平台版本，如果`COMPOSER_HOME`在自我更新執行時設定 ，則 Composer 自我更新可能會失敗。  
下列合併命令將無法執行： `export COMPOSER_HOME=/home/webapp/composer-home && /usr/bin/composer.phar self-update 2.7.0`  
不過，先前的範例將會運作。在先前的範例中， 的選項設定`COMPOSER_HOME`不會傳遞至`01updateComposer`執行，而且不會在自我更新命令執行時設定。

**重要**  
若您的 `composer.phar self-update` 命令省略版本編號，則您每次部署原始碼時，或當 Auto Scaling 佈建新的執行個體時，Composer 都將更新。若已發行的 Composer 版本與您的應用程式不相容，可能導致擴展操作和部署失敗。

如需 Elastic Beanstalk PHP 平台的詳細資訊，包括 Composer 版本，請參閱文件《AWS Elastic Beanstalk 平台》**中的 [PHP 平台版本](https://docs.aws.amazon.com/elasticbeanstalk/latest/platforms/platforms-supported.html#platforms-supported.PHP)。

## 在 Elastic Beanstalk 組態中擴展 php.ini
<a name="php-configuration-phpini"></a>

使用帶有 `files` 區塊的組態檔案，將 `.ini` 檔案新增至您環境執行個體上的 `/etc/php.d/`。主要的組態檔案 `php.ini`，會自此資料夾依字母順序提取檔案的設定。此資料夾內的檔案預設會啟用許多延伸模組。

**Example .ebextensions/mongo.config**  

```
files:
  "/etc/php.d/99mongo.ini":
    mode: "000755"
    owner: root
    group: root
    content: |
      extension=mongo.so
```