구성 파일

구성 파일(php.ini)은 PHP가 시작될 때 읽습니다. PHP의 서버 모듈 버전의 경우 웹 서버가 시작될 때 한 번만 발생합니다. CGICLI 버전의 경우 모든 호출에서 발생합니다.

php.ini/var>는 다음 위치에서 검색됩니다(순서대로):

  • SAPI 모듈 특정 위치(Apache 2의 PHPNiDir 지시문, CGI 및 CLI의 -c 명령줄 옵션)
  • PHPRC 환경 변수.
  • php.ini 파일의 위치는 다른 버전의 PHP에 대해 설정할 수 있습니다. 레지스트리 키의 루트는 설치된 OS 및 PHP의 32비트 또는 64비트에 따라 다릅니다. 32비트 OS의 32비트 PHP 또는 64비트 OS의 64비트 PHP의 경우 64비트 OS의 PHP 32비트 버전에 대해 [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP] 사용 [HKEY_LOCAL_MACHINE\SOFTWARE] \WOW6432Node\PHP]] 대신 동일한 비트 설치의 경우 [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\xyz], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\xy][HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x] 레지스트리 키가 순서대로 검사됩니다. 여기서 x, y 및 z는 PHP 주, 부 및 릴리스 버전을 의미합니다. 64비트 OS에서 PHP의 32비트 버전의 경우 다음 레지스트리 키가 순서대로 검사됩니다. [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\xyz], [ HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\xy][HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x], 여기서 x, y 및 z는 PHP 주, 부 및 릴리스 버전을 의미합니다. 이들 중 하나에 IniFilePath 값이 있는 경우 키, 발견된 첫 번째 키가 php.ini의 위치로 사용됩니다(Windows만 해당).
  • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] 또는 [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP], IniFilePath 값(Windows만 해당).
  • 현재 작업 디렉토리(CLI 제외).
  • 웹 서버의 디렉토리(SAPI 모듈의 경우) 또는 PHP의 디렉토리(Windows의 경우).
  • Windows 디렉터리(C:\windows 또는 C:\winnt)(Windows의 경우) 또는 --with-config-file-path 컴파일 시간 옵션.

php-SAPI.ini가 있는 경우(여기서 SAPI는 사용 중인 SAPI이므로 예를 들어 php-cli.ini 또는 php-apache.ini) php.ini 대신 사용됩니다. SAPI 이름은 php_sapi_name()으로 확인할 수 있습니다.

메모: Apache 웹 서버는 시작 시 디렉토리를 루트로 변경하여 PHP가 루트 파일 시스템(있는 경우)에서 php.ini 읽기를 시도하게 합니다.

환경 변수를 사용하면 아래와 같이 php.ini에서 사용할 수 있습니다.

예제 #1 php.ini 환경 변수

; PHP_MEMORY_LIMIT is taken from environment
memory_limit = ${PHP_MEMORY_LIMIT}
                

확장에 의해 처리되는 php.ini 지시문은 확장 자체의 해당 페이지에 문서화되어 있습니다. 핵심 지시문 목록은 부록에서 확인할 수 있습니다. 모든 PHP 지시문이 이 매뉴얼에 반드시 문서화되어 있는 것은 아닙니다. PHP 버전에서 사용할 수 있는 지시문의 전체 목록은 주석이 잘 달린 php.ini 파일을 참조하십시오. 또는 » Git의 최신 php.ini도 도움이 될 수 있습니다.

예제 #2 php.ini 예제

; any text on a line after an unquoted semicolon (;) is ignored
[php] ; section markers (text within square brackets) are also ignored
; Boolean values can be set to either:
;    true, on, yes
; or false, off, no, none
register_globals = off
track_errors = yes

; you can enclose strings in double-quotes
include_path = ".:/usr/local/lib/php"

; backslashes are treated the same as any other character
include_path = ".;c:\php\lib"
                

.ini 파일 내에서 기존 .ini 변수를 참조할 수 있습니다. 예: open_basedir = ${open_basedir} ":/new/dir".

디렉토리 스캔

php.ini를 읽은 후 디렉토리에서 .ini 파일을 스캔하도록 PHP를 구성할 수 있습니다. 이것은 --with-config-file-scan-dir 옵션을 설정하여 컴파일 타임에 수행할 수 있습니다. 그런 다음 PHP_INI_SCAN_DIR 환경 변수를 설정하여 스캔 디렉토리를 런타임에 재정의할 수 있습니다.

플랫폼별 경로 구분 기호(; Windows, NetWare 및 RISC OS의 경우, : 다른 모든 플랫폼의 경우, PHP가 사용하는 값은 PATH_SEPARATOR 상수로 사용 가능)로 구분하여 여러 디렉토리를 스캔할 수 있습니다. PHP_INI_SCAN_DIR에 빈 디렉토리가 주어지면 PHP는 컴파일 타임에 --with-config-file-scan-dir을 통해 주어진 디렉토리도 스캔합니다.

각 디렉토리 내에서 PHP는 .ini로 끝나는 모든 파일을 알파벳 순서로 스캔합니다. 로드된 파일 목록과 순서는 php_ini_scanned_files()를 호출하거나 --ini 옵션과 함께 PHP를 실행하여 사용할 수 있습니다.

Assuming PHP is configured with --with-config-file-scan-dir=/etc/php.d,
and that the path separator is :...

$ php
  PHP will load all files in /etc/php.d/*.ini as configuration files.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php
  PHP will load all files in /usr/local/etc/php.d/*.ini as
  configuration files.

$ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php
  PHP will load all files in /etc/php.d/*.ini, then
  /usr/local/etc/php.d/*.ini as configuration files.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php
  PHP will load all files in /usr/local/etc/php.d/*.ini, then
  /etc/php.d/*.ini as configuration files.