php.ini 파일

App Engine 애플리케이션에 php.ini 파일을 포함시킬 수 있습니다. 이 파일을 사용하면 PHP 인터프리터 지시문의 동작을 맞춤설정할 수 있습니다.

php.ini 정보

php.ini 파일은 애플리케이션의 기본 디렉터리(app.yaml 파일과 동일한 디렉터리)에 있어야 합니다. PHP 인터프리터가 초기화될 때와 애플리케이션 코드가 실행되기 전에 로드됩니다.

해당 파일은 다른 .ini 파일과 동일한 구문을 따릅니다. 간단한 예는 다음과 같습니다.

; This is a simple php.ini file on App Engine
;
; This is a directive set to "On"
widget_compression = "On"

코어 지시문과 변경 가능한 최빈값의 목록은 php.net에 게시됩니다. 확장 프로그램에서 처리하는 php.ini 지시문은 확장 프로그램 자체의 각 페이지에 설명되어 있습니다.

다음 변경할 수 있는 모드 값 중 하나를 가지는 모든 PHP 지시문을 재정의할 수 있습니다.

  • PHP_INI_SYSTEM
  • PHP_INI_ALL
  • PHP_INI_PERDIR

일부 함수는 PHP의 App Engine 구현에서 사용 중지되었습니다. 해당 함수를 대상으로 하는 지시문은 효과가 없습니다.

동적으로 로드 가능한 확장의 조합은 extension 지시문을 통해 사용 설정될 수 있습니다.

App Engine용 PHP 지시문

다음 지시문은 App Engine 환경에만 적용되며, php.ini 파일에 포함되어 있을 수 있습니다.

  • google_app_engine.enable_curl_lite - '1'로 설정하면 기본 제공되는 App Engine 전용 cURL 버전인 'cURL lite'를 사용 설정합니다. 'cURL lite'를 표준 cURL 함수를 사용하는 방식과 동일하게 사용할 수 있습니다. 하지만 소켓이 아닌 후드에서 URL Fetch를 호출하므로 URL Fetch가 없는 함수에서는 CurlLiteMethodNotSupportedException이 발생합니다.

    참고: 'cURL lite'가 cURL 함수를 오버로드하므로 앱은 'curl.so' 확장자와 'cURL lite'를 동시에 사용 설정할 수 없습니다.

  • google_app_engine.enable_functions - App Engine에서 비공식적으로 중지되었지만 이 지시문을 사용하여 다시 사용 설정할 수 있는 함수입니다. 쉼표로 구분된 문자열에 함수의 이름을 나열합니다.
    google_app_engine.enable_functions = "phpversion, phpinfo"
  • google_app_engine.allow_include_gs_buckets - 애플리케이션이 include 또는 require 문을 Google Cloud Storage에 저장된 파일과 함께 사용할 수 있습니다.

    참고: 기본 버킷에 #default#를 사용할 수 있습니다. 이 값은 런타임 시 현재 기본 버킷 이름으로 자동 대체됩니다.

    예를 들어 쉼표로 구분된 문자열 형식의 파일이 포함된 bucket_1bucket_2 버킷과 함께 기본 버킷을 나열합니다.

    google_app_engine.allow_include_gs_buckets = "#default#, bucket_1, bucket_2"

    포함될 수 있는 파일에 버킷 및 경로를 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

    google_app_engine.allow_include_gs_buckets = "bucket_1/path_x"

    Google Cloud Storage에서 어떤 파일을 포함할 수 있는지 검사를 수행할 때, 제공된 경로는 포함되는 파일 또는 필요한 파일이 되기 위해 파일 이름의 시작 부분과 일치해야 하는 프리픽스로 취급됩니다. 예를 들어 위 경로 예시를 사용하면 gs://bucket_1/path_x/...의 파일은 프리픽스가 일치하므로 제공된 경로에 포함될 수 있지만 gs://bucket_1 or gs://bucket_1/path_y/의 파일은 프리픽스가 일치하지 않으므로 포함되지 않습니다.

    업로드된 파일이 허용된 포함 버킷으로 이동하면 사용자에게 LFI 공격의 가능성을 알리는 경고 메시지가 생성됩니다. 이 경우 보다 제한적인 경로를 사용하는 것을 고려해야 합니다.

    참고: 경로는 파일 프리픽스로 취급되므로 특정 파일(예: google_app_engine.allow_include_gs_buckets = "bucket_1/path_x.ext", "bucket_2/path_z/some_file.ext)도 포함될 수 있습니다.

  • google_app_engine.disable_readonly_filesystem - 기본적으로 PHP 애플리케이션을 파일 시스템에 쓸 수 없습니다. 이 지시문을 '1'로 설정하면 로컬 개발 환경에 대한 제한이 해제됩니다. 그러나 항상 샌드박스 제한 사항이 적용되는 프로덕션에서 실행되는 애플리케이션에는 이 설정이 적용되지 않습니다.