PHP에서 ini_set () 함수는 PHP 구성 설정을 동적으로 변경하는 데 사용됩니다. 그 목적은 런타임시 PHP의 php.ini 구성 파일의 특정 값을 수정하여 필요에 따라 PHP 환경의 동작을 조정하는 것입니다. 그러나 경우에 따라 INI_SET () 함수를 사용하는 구성 설정에도 불구하고 최종 구성 값은 다른 설정에 의해 여전히 덮어 쓸 수 있음을 알 수 있습니다. 이 상황으로 인해 예상되는 행동이 실제 결과와 일치하지 않아 개발에 문제가 발생할 수 있습니다. 이 기사는이 현상의 일반적인 원인을 탐구 하고이 문제를 피하기위한 몇 가지 해결책을 제공합니다.
PHP 구성 파일 php.ini 는 처음로드 된 구성 소스이며 일반적으로 기본 환경 변수 및 구성 값을 설정합니다. ini_set ()을 사용하여 런타임에서 일부 구성을 수정할 수 있지만 일부 구성 항목은 런타임 변경보다 우선 순위가 높습니다. 예를 들어, php.ini 의 구성 값은 ini_set () 후에 다시로드 될 때 동적 설정을 덮어 씁니다.
또한 일부 PHP 구성 항목에 대한 수정 권한은 PHP 보안 모드 또는 운영 체제 권한의 영향을받습니다. 이러한 환경에서 INI_SET () 가 비활성화되고 특정 구성 항목을 동적으로 변경할 수 없습니다.
PHP가 SAFE_MODE 또는 OPEN_BASEDIR 제한을 활성화하도록 구성되면 일부 민감한 구성 항목 (예 : 파일 액세스, 경로 설정)이 시스템 환경에 의해 제어됩니다. 즉, ini_set ()은 이러한 값을 수정할 수 없거나 운영 체제의 보안 정책에 의해 수정 된 값이 덮어 씁니다.
PHP가 Apache 서버를 통해 실행될 때 .htaccess 또는 httpd.conf 와 같은 Apache의 구성 파일을 통해 일부 구성 항목을 조정할 수 있습니다. 이 구성 파일은 ini_set () 에 의해 작성된 변경을 무시할 수 있습니다. 예를 들어, 일부 PHP 설정이 .htaccess 파일에서 수정되면 APACHE가 시작될 때 이러한 설정이 적용되며 ini_set () 을 통해 런타임에서 변경된 변경 사항을 덮어 씁니다.
FASTCGI 또는 PHP-FPM (FASTCGI Process Manager)을 통해 실행되는 PHP 프로그램의 경우 PHP 구성은 일반적으로 PHP-FPM.Conf 또는 www.conf 와 같은 구성 파일에 의해 관리됩니다. 이 파일에 특정 구성 항목이 지정된 경우, 코드에서 ini_set ()을 사용하여 수정 된 경우에도 요청 시작시 FPM 구성에 의해 덮어 쓸 수 있습니다.
특정 PHP 확장 (예 : Opcache, Memcached, Xdebug 등)은 PHP 스크립트 실행 중에 구성 항목에 영향을 미치거나 덮어 쓰일 수 있습니다. 확장은 PHP 스타트 업에서 초기화되고 ini_set () 에 의해 설정된 구성 값을 무시할 수 있기 때문입니다. 따라서 구성 항목에서 확장자가 작동하면 ini_set () 의 설정이 덮어 쓸 수 있습니다.
올바른 위치에서 PHP 구성을 설정하십시오. 예를 들어, PHP가 Apache를 통해 실행되는 경우 코드를 통해 동적으로 설정하지 않고 .htaccess 또는 httpd.conf 로 관련 구성을 설정하는 것이 선호됩니다. PHP-FPM을 사용하는 경우 PHP-FPM.Conf를 통해 해당 구성 옵션을 설정하십시오.
ini_set () 로 수정 된 구성 항목을 런타임에 동적으로 조정할 수 있는지 확인하십시오. 일부 구성 항목은 PHP_INI_SYSTEM 또는 PHP_INI_PERDIR 로 설정할 수 있으며 이러한 항목은 올바른 환경에서 수정해야합니다. phpinfo ()를 사용하여 각 구성 항목의 권한 및로드 순서를보고 ini_set () 에서 수정할 수있는 항목을 결정할 수 있습니다.
일부 구성 항목의 경우 INI_SET () 를 사용하는 것이 적합하지 않을 수 있습니다. 특히 이러한 설정이 서버 레벨에서 유효한 지 확인 해야하는 경우. 중요한 구성 항목 (예 : max_execution_time , memory_limit 등)의 경우 명령 줄을 통해 PHP를 시작할 때 php.ini를 직접 수정하거나 해당 매개 변수를 전달하는 것을 고려할 수 있습니다. 이로 인해 런타임에 동적 설정이 덮어 쓰는 것을 방지합니다.
구성 항목의 값에 영향을 미치는 PHP 확장자가 발생하면 확장자를 비활성화하거나 확장 구성을 확인하여 관련 구성 항목을 불필요하게 작성하지 않도록 할 수 있습니다. 예를 들어, OpCache를 사용하는 경우 OpCache 구성이 ini_set () 의 값을 방해하지 않거나 불필요한 확장을 비활성화 할 수 있습니다.
겪고있는 재정의 문제가 FastCGI 또는 PHP-FPM 환경에서 발생하는 경우 PHP-FPM 구성 파일을 확인하고 환경 변수가 올바르게 설정되어 있는지 확인하는 것이 좋습니다. 또한 phpinfo () 를 통해 런타임 환경의 구성을 확인하여 시작시 올바른 설정이 전달되는지 확인할 수 있습니다.
PHP 개발자는 합리적인 구성 관리를 통해 다른 설정에서 덮어 쓰는 구성 항목 문제를 피할 수 있습니다. ini_set () 는 런타임에 동적 구성을 변경할 수있는 매우 유용한 도구이지만 몇 가지 제한 사항도 있습니다. PHP 구성의 우선 순위, 런타임 환경의 중재 및 기타 설정 파일을 이해하면 개발자가 PHP 환경의 동작을 더 잘 제어하여 프로그램 안정성과 유지 관리를 향상시킬 수 있습니다.