# PHP拡張機能と設定

Source: https://support.kapsulehost.com/ja-jp/php-extensions-and-ini

KapsuleHost webホスティングがWordPress、WooCommerce、PHPサイト向けに提供しているPHPバージョンと拡張機能、お客様自身で変更できる設定、そして変更の反映に最大5分かかる理由について説明します。

静的サイト、Node.js、Pythonのサイトは PHP を実行しません。サイトに関するPHPのすべては一か所にまとまっています。**ウェブサイト**から該当サイトをクリックし、**設定**、続いて**PHP**を開いてください。このページにはバージョン選択、変更可能な設定、Composerの実行機能、PHPエラーログがあります。

![KPanelにおけるサイトのPHPページ。バージョン選択と変更可能な設定が表示されている](https://support.kapsulehost.com/help/screenshots/php-extensions-and-ini.2214ab47.webp)

## PHPバージョンの選択

選択できるバージョンは4つです。**8.4、8.3、8.2、8.1**。新規サイトのデフォルトは8.3です。

ご利用のソフトウェアが実際にサポートしている最新のバージョンを選んでください。新しいPHPは体感できるほど高速で、セキュリティ修正の提供期間も長くなります。すぐに最新版へ飛びつかない方がよい理由は互換性です。古いプラグインや何年も前に書かれたカスタムコードは、テストされたことのないバージョンでは完全に動作しなくなる場合があります。

変更するには、バージョンを選択して**バージョンを適用**をクリックします。変更は即座に反映され、お客様側での再起動は不要で、ダウンタイムも発生しません。

> **Tip:** PHPバージョンの変更はまずステージング環境で行い、サイトを実際に操作して確認してから本番環境に適用してください。やむを得ず本番で直接変更する場合は、ご自身で状況を確認できるタイミングで行ってください。元に戻すのもワンクリックでできます。[ステージング環境](https://support.kapsulehost.com/ja-jp/staging-environments)をご覧ください。

バージョン変更でサイトが壊れた場合は、前のバージョンに戻してログを確認してください。エラーには実行できなかったファイル名が記載されます。[PHPバージョンの変更](https://support.kapsulehost.com/ja-jp/changing-php-version)および[エラーログ](https://support.kapsulehost.com/ja-jp/error-logs)をご覧ください。

## 変更可能な設定

PHPページでは5つの設定がドロップダウンとして表示されます。これらは実際にトラブルの原因となることが多いため、表に出されています。

| 設定 | デフォルト | 選択可能な値 | 制御する内容 |
|---|---|---|---|
| `memory_limit` | 256M | 128M, 256M, 512M, 1024M, 2048M | 1つのリクエストが使用できるメモリ量 |
| `max_execution_time` | 30 | 30, 60, 120, 300, 600 | 1つのリクエストが実行できる秒数 |
| `upload_max_filesize` | 64M | 16M, 32M, 64M, 128M, 256M | アップロードできる単一ファイルの最大サイズ |
| `post_max_size` | 65M | 17M, 33M, 65M, 129M, 257M | フォーム送信全体の最大サイズ |
| `max_input_vars` | 3000 | 1000, 3000, 5000, 10000 | 1回の送信に含められるフィールド数 |

どれを調整すべきか:

- **一定サイズを超えるとアップロードが失敗する場合**: `upload_max_filesize`を上げてください。あわせて`post_max_size`も上げてください。
- **大きなフォームやページビルダーが保存時にフィールドを失う場合**: `max_input_vars`を上げてください。これはエラーが出ないため非常にわかりにくく、厄介な問題です。超過したフィールドは静かに破棄されます。
- **ページが途中で止まりエラーも出ない場合**: `memory_limit`を上げてください。[WordPressのメモリ制限](https://support.kapsulehost.com/ja-jp/wordpress-memory-limit)をご覧ください。
- **長時間のインポートやエクスポートがタイムアウトする場合**: `max_execution_time`を上げ、コマンドラインからジョブを実行することも検討してください。[WP-CLI](https://support.kapsulehost.com/ja-jp/wordpress-wp-cli)をご覧ください。

> **Note:** `post_max_size`は`upload_max_filesize`より大きい値である必要があります。アップロードされたファイルは投稿データの一部として送信されるためです。この条件を満たさない組み合わせを選択した場合、プラットフォームが`post_max_size`を自動的に引き上げます。選んでいない値が表示されるのはこのためです。

## 変更の反映に最大5分かかる理由

このページで最もよくある混乱の原因なので、正確に説明しておきます。

設定内容はサイトのドキュメントルートにある`.user.ini`ファイルに書き込まれます。PHPはこのファイルを読み込んだ後、**300秒間(5分間)キャッシュします**。このキャッシュが切れるまで、PHPは以前の値を使い続けます。

そのため、変更を保存した後は:

- ページには最大5分間、以前の制限値が表示され続けます。
- `phpinfo()`も最大5分間、以前の制限値を表示し続けます。
- 強制リフレッシュをしても効果はありません。ブラウザのキャッシュを消去しても同様です。
- 何かを再起動する必要はなく、そもそも再起動はできません。そのまま待ってください。

5分以上経過しても値が変わらない場合は、実際に問題が発生している可能性があるため、サポートチケットを開くことをおすすめします。

## `.user.ini`をご自身で編集する

パネルが公開していないディレクティブが必要な場合などは、SFTPまたはSSH経由で`.user.ini`を直接編集することもできます。このファイルはサイトのドキュメントルートにあります。[SFTPアクセス](https://support.kapsulehost.com/ja-jp/sftp-access)をご覧ください。

フォーマットは1行につき1つのディレクティブです:

```ini
memory_limit = 512M
max_execution_time = 120
```

`.user.ini`にできることには2つの重要な制限があります。

**ディレクトリ単位、またはユーザー単位での設定がPHPで許可されているディレクティブに対してのみ機能します。** 上記の5つはすべてこれに該当します。`disable_functions`や、`extension=`による拡張機能の読み込みなど、システムレベルでしか設定できないディレクティブは、`.user.ini`ファイル内では無視されます。エラーにはならず、単に何も起こらないため、原因究明に丸一日費やしてしまう方もいます。

**パネルが読み込んで表示するのは単純なキーのみです。** `opcache.enable`や`date.timezone`のようにドット(.)を含むディレクティブはPHPによって正しく処理されますが、パネルのフォームには表示されません。手動で設定した後にパネル経由で何かを変更した場合は、後でファイルの内容を確認してください。

> **Warning:** KapsuleHost webホスティングはApacheではなくnginxで動作しています。`.htaccess`ファイルは誰にも読み込まれません。`.htaccess`ファイルに記述したPHPディレクティブ(`php_value memory_limit`など)は、ここではまったく機能しません。代わりに`.user.ini`かパネルをご利用ください。[WordPressと.htaccess](https://support.kapsulehost.com/ja-jp/wordpress-htaccess)をご覧ください。

## 利用可能な拡張機能

標準ビルドは幅広く、WordPress、WooCommerce、そしてほとんどのPHPアプリケーションが必要とする機能をすべて含んでいます。

**データベース**: `mysqli`、`pdo_mysql`、`sqlite3`、`pdo_sqlite`
**画像**: `gd`、`imagick`、`exif`
**キャッシュ**: `Zend OPcache`、`redis`、`memcached`
**テキストとロケール**: `mbstring`、`iconv`、`intl`、`gettext`、`ctype`
**XMLとデータ**: `dom`、`simplexml`、`xml`、`xmlreader`、`xmlwriter`、`xsl`、`json`
**ネットワーク**: `curl`、`soap`、`sockets`、`ftp`、`openssl`
**数学と暗号**: `bcmath`、`sodium`、`hash`、`random`
**ファイルとシステム**: `fileinfo`、`zip`、`zlib`、`phar`、`posix`、`pcntl`、`shmop`、`calendar`、`tokenizer`

知っておく価値のあるバージョン差異が1つあります。`imap`拡張機能は8.3以前には存在しますが、8.4には存在しません。これはPHP本体からこのリリースで削除されたためです。これを必要とするアプリケーションをお使いの場合は、8.3にとどまるか、そのアプリケーションを最新のメールライブラリへ移行してください。

**インストールされていないもの**: PostgreSQLドライバー、MongoDB、Xdebug、`mcrypt`、そしてionCubeやSourceGuardianなどの商用コードローダー。

パネルからご自身で拡張機能を有効化・無効化することはできません。お使いのアプリケーションが一覧にないものを必要とする場合は、チケットを開いて実行環境についてご説明ください。追加できるかどうかは拡張機能によって異なります。[サポートチケットの開き方](https://support.kapsulehost.com/ja-jp/opening-a-support-ticket)をご覧ください。

## 実際に読み込まれている内容を確認する

推測に頼らず確認する方法です:

- **WordPressの場合**: Tools、Site Health、Info、Serverの順に進みます。PHPバージョンと関連する制限値が一覧表示されます。
- **SSH経由の場合**: バージョン確認には`php -v`、読み込まれている拡張機能の確認には`php -m`を使用します。[SSH鍵の追加](https://support.kapsulehost.com/ja-jp/adding-ssh-keys)をご覧ください。

> **Warning:** `phpinfo()`ファイルをWebルートに置いたままにしないでください。これはお客様のパス、拡張機能、設定内容を見つけた人全員に公開してしまい、自動化されたスキャナーもまさにこのファイル名を狙って探します。何かを確認するために作成した場合は、確認後すぐに削除してください。

## 関連ガイド

- [PHPバージョンの変更](https://support.kapsulehost.com/ja-jp/changing-php-version)
- [WordPressのメモリ制限](https://support.kapsulehost.com/ja-jp/wordpress-memory-limit)
- [エラーログ](https://support.kapsulehost.com/ja-jp/error-logs)
- [HTTPエラーコード](https://support.kapsulehost.com/ja-jp/http-error-codes)
- [サイトの速度低下とリソース制限](https://support.kapsulehost.com/ja-jp/site-slow-resource-limits)
- [WordPressと.htaccess](https://support.kapsulehost.com/ja-jp/wordpress-htaccess)
- [ホスティング用語集](https://support.kapsulehost.com/ja-jp/glossary)
