# PHP 확장 기능 및 설정

Source: https://support.kapsulehost.com/ko-kr/php-extensions-and-ini

KapsuleHost 웹 호스팅이 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 버전 선택하기

선택 가능한 버전은 네 가지입니다: **8.4, 8.3, 8.2, 8.1**. 신규 사이트는 기본적으로 8.3을 사용합니다.

사용 중인 소프트웨어가 실제로 지원하는 최신 버전을 선택하세요. 최신 PHP는 체감할 수 있을 정도로 빠르고, 보안 수정 지원 기간도 더 깁니다. 곧바로 최신 버전으로 넘어가지 말아야 할 이유는 호환성 때문입니다. 오래된 플러그인이나 수년 전에 작성된 커스텀 코드는 한 번도 테스트되지 않은 버전에서 완전히 작동하지 않을 수 있습니다.

변경하려면 버전을 선택하고 **버전 적용**을 클릭하세요. 변경 사항은 즉시 적용되며, 별도의 재시작이 필요 없고 다운타임도 없습니다.

> **Tip:** PHP 버전은 먼저 스테이징에서 변경하고, 사이트를 클릭해 보며 확인한 다음에야 프로덕션에서 변경하세요. 반드시 실제 운영 환경에서 변경해야 한다면 직접 지켜볼 수 있을 때 진행하고, 되돌리는 작업은 클릭 한 번이면 된다는 점을 기억해 두세요. [스테이징 환경](https://support.kapsulehost.com/ko-kr/staging-environments)을 참고하세요.

버전 변경으로 사이트가 망가지면 이전 버전으로 되돌리고 로그를 확인하세요. 오류에는 실행되지 못한 파일 이름이 표시됩니다. [PHP 버전 변경하기](https://support.kapsulehost.com/ko-kr/changing-php-version)와 [오류 로그](https://support.kapsulehost.com/ko-kr/error-logs)를 참고하세요.

## 변경 가능한 설정

PHP 페이지에는 드롭다운 형태로 다섯 가지 설정이 노출되어 있습니다. 실제로 문제를 일으키는 설정들이기 때문에 이렇게 겉으로 드러나 있는 것입니다.

| 설정 | 기본값 | 선택 가능한 값 | 설정 내용 |
|---|---|---|---|
| `memory_limit` | 256M | 128M, 256M, 512M, 1024M, 2048M | 요청 하나가 사용할 수 있는 메모리 양 |
| `max_execution_time` | 30 | 30, 60, 120, 300, 600 | 요청 하나가 실행될 수 있는 시간(초) |
| `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 | 한 번의 제출에 포함될 수 있는 필드 수 |

원하는 상황별로 설정은 다음과 같습니다:

- **특정 크기 이상의 업로드가 실패하는 경우**: `upload_max_filesize`를 올리고, 이와 함께 `post_max_size`도 올리세요.
- **대형 폼이나 페이지 빌더가 저장 시 필드를 잃어버리는 경우**: `max_input_vars`를 올리세요. 아무런 오류도 나지 않기 때문에 이 문제는 눈에 보이지 않으면서도 매우 성가십니다. 초과된 필드가 조용히 버려질 뿐입니다.
- **페이지가 오류 없이 도중에 멈추는 경우**: `memory_limit`를 올리세요. [WordPress 메모리 제한](https://support.kapsulehost.com/ko-kr/wordpress-memory-limit)을 참고하세요.
- **긴 가져오기나 내보내기 작업이 시간 초과되는 경우**: `max_execution_time`를 올리고, 대신 명령줄에서 작업을 실행하는 것도 고려해 보세요. [WP-CLI](https://support.kapsulehost.com/ko-kr/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/ko-kr/sftp-access)을 참고하세요.

형식은 한 줄에 지시어 하나입니다:

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

`.user.ini`이 할 수 있는 일에는 두 가지 중요한 제한이 있습니다:

**디렉터리 또는 사용자 단위로 설정이 허용된 지시어에서만 작동합니다.** 위의 다섯 가지는 모두 여기에 해당합니다. `disable_functions`이나 `extension=`로 확장 기능을 불러오는 것처럼 시스템 수준에서만 설정 가능한 지시어는 `.user.ini` 파일에서 무시됩니다. 오류가 나지 않고 그저 아무 작동도 하지 않을 뿐이며, 그래서 사람들이 이런 문제에 오후 시간을 통째로 날리게 되는 것입니다.

**패널은 단순한 키만 다시 읽어옵니다.** `opcache.enable`이나 `date.timezone`처럼 점(.)이 포함된 지시어는 PHP가 정상적으로 인식하지만 패널 양식에는 나타나지 않습니다. 직접 지시어를 설정한 뒤 나중에 패널에서 뭔가를 바꿨다면, 이후 파일을 확인해 보세요.

> **Warning:** KapsuleHost 웹 호스팅은 Apache가 아니라 nginx를 사용합니다. `.htaccess` 파일은 아무도 읽지 않습니다. `php_value memory_limit`처럼 `.htaccess` 파일에 넣은 PHP 지시어는 여기서 전혀 아무 작동도 하지 않습니다. 대신 `.user.ini`나 패널을 사용하세요. [WordPress와 .htaccess](https://support.kapsulehost.com/ko-kr/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`

알아 두면 좋은 버전 차이 하나로, `imap` 확장은 8.3 이하 버전에는 있지만 8.4에는 없습니다. 해당 버전에서 PHP 자체에서 제거되었기 때문입니다. 이 확장이 여전히 필요한 애플리케이션을 사용 중이라면 8.3에 머무르거나 해당 애플리케이션을 최신 메일 라이브러리로 이전하세요.

**설치되어 있지 않은 것**: PostgreSQL 드라이버, MongoDB, Xdebug, `mcrypt`, 그리고 ionCube나 SourceGuardian 같은 상용 코드 로더.

패널에서 직접 확장 기능을 활성화하거나 비활성화할 수는 없습니다. 애플리케이션에 목록에 없는 기능이 필요하다면 티켓을 열고 어떤 것을 실행 중인지 설명해 주세요. 추가 가능 여부는 해당 확장 기능에 따라 다릅니다. [지원 티켓 열기](https://support.kapsulehost.com/ko-kr/opening-a-support-ticket)를 참고하세요.

## 실제로 로드된 내용 확인하기

추측하지 말고 직접 확인하세요:

- **WordPress에서**: 도구, 그다음 사이트 상태, 그다음 정보, 그다음 서버로 이동합니다. PHP 버전과 관련 한도가 표시됩니다.
- **SSH에서**: 버전 확인은 `php -v`, 로드된 확장 기능 확인은 `php -m`를 사용하세요. [SSH 키 추가하기](https://support.kapsulehost.com/ko-kr/adding-ssh-keys)를 참고하세요.

> **Warning:** 웹 루트에 `phpinfo()` 파일을 남겨두지 마세요. 이 파일은 경로, 확장 기능, 설정을 이를 발견한 누구에게나 공개하며, 자동화된 스캐너들은 바로 이 파일명을 찾고 다닙니다. 무언가를 확인하기 위해 하나 만들었다면 즉시 삭제하세요.

## 관련 가이드

- [PHP 버전 변경하기](https://support.kapsulehost.com/ko-kr/changing-php-version)
- [WordPress 메모리 제한](https://support.kapsulehost.com/ko-kr/wordpress-memory-limit)
- [오류 로그](https://support.kapsulehost.com/ko-kr/error-logs)
- [HTTP 오류 코드](https://support.kapsulehost.com/ko-kr/http-error-codes)
- [사이트 속도 저하 및 리소스 한도](https://support.kapsulehost.com/ko-kr/site-slow-resource-limits)
- [WordPress와 .htaccess](https://support.kapsulehost.com/ko-kr/wordpress-htaccess)
- [호스팅 용어집](https://support.kapsulehost.com/ko-kr/glossary)
