PHP의 ini 파일 관련 동작 기능에 대한 자세한 소개

醉折花枝作酒筹
풀어 주다: 2023-03-11 07:56:01
앞으로
1616명이 탐색했습니다.

소규모 회사, 특히 기업가적인 회사에서는 전체 서버를 구축하는 것이 일반적으로 PHP 개발 엔지니어의 책임 중 하나입니다. 그 중 가장 중요한 것은 서버의 php.ini 파일을 구성하는 것입니다. 일부 매개변수는 서버 성능에 큰 영향을 미치며, 일부 매개변수는 PHP가 실행될 때 동적으로 지정하고 얻을 수 있습니다. 오늘은 php.ini 파일과 관련된 몇 가지 동작 함수를 배워보겠습니다.

PHP의 ini 파일 관련 동작 기능에 대한 자세한 소개

ini 파일의 구성 매개변수를 동적으로 설정

이 기능은 누구에게나 친숙하고, 기본적으로 PHP 개발을 해본 사람이라면 누구나 사용해봤을 것이라고 생각합니다. 그러나 일부 매개변수는 수정할 수 없습니다. 알고 계셨나요?

ini_set('allow_url_fopen', 0);
echo ini_get('allow_url_fopen'), PHP_EOL; // 1 ,无法修改,PHP_INI_SYSTEM

ini_set('memory_limit', -1);
echo ini_get('memory_limit'), PHP_EOL; // -1,可以修改,PHP_INI_ALL
로그인 후 복사

첫 번째 댓글에 PHP_INI_SYSTEM이 적혀 있는데 이 매개변수는 수정할 수 없습니다. 예, 나는 당신이 똑똑하고 이러한 매개변수에 해당 유형이 있다는 것을 알아냈다고 믿습니다. PHP_INI_SYSTEM은 php.ini 또는 httpd.conf에서만 수정할 수 있으며 언어가 동적으로 실행 중일 때는 수정할 수 없음을 의미합니다.

4가지 유형의 php.ini 구성 매개변수가 있습니다:

  • PHP_INI_USER: 사용자 스크립트(예: ini_set()) 또는 Windows 레지스트리(PHP 5.3 이후) 및 .user.ini에서 설정할 수 있습니다.

  • PHP_INI_PERDIR: php.ini, .htaccess 또는 httpd.conf에서 설정 가능

  • PHP_INI_SYSTEM: php.ini 또는 httpd.conf에서 설정 가능

  • PHP_INI_ALL: 어디서나 설정 가능

즉 , ini_set()을 사용하여 PHP_INI_USER 및 PHP_INI_ALL 유형의 매개변수를 설정할 수 있으며, 나머지 두 개는 php.ini 또는 기타 구성 파일에서만 설정하고 수정할 수 있습니다. 구성 매개변수에 해당하는 특정 유형에 대해서는 관련 PHP 설명서를 참조하세요.

https://www.php.net/manual/zh/ini.list.php

ini 파일에서 구성 정보 가져오기

물론 php.ini에서 구성 정보를 읽는 데에는 제한이 없습니다. 파일. 직접 읽을 수 있습니다. 두 가지 함수를 사용하여 읽을 수 있습니다: get_cfg_var() 및 ini_get(). 또한 배열 컬렉션 형태로 구성 정보를 얻을 수 있는 ini_get_all() 함수가 있습니다. 하나씩 살펴보겠습니다.

get_cfg_var() 및 ini_get()

둘 다 단일 구성 매개변수 정보를 읽습니다.

echo get_cfg_var('error_reporting'), PHP_EOL; // 32759
echo ini_get('error_reporting'), PHP_EOL; // 32759

echo get_cfg_var('request_order'), PHP_EOL; // GP
echo ini_get('request_order'), PHP_EOL; // GP

// php.ini A=TEST_A
echo get_cfg_var('A'), PHP_EOL; // TEST_A
echo ini_get('A'), PHP_EOL; //
로그인 후 복사

위의 두 가지 항목에 대해서는 따로 설명할 필요가 없습니다. 우리가 주목해야 할 것은 마지막 항목입니다. php.ini 파일에 사용자 정의 구성 매개변수 A를 정의합니다. get_cfg_var()는 정상적으로 이 정보를 얻을 수 있지만, ini_get()은 얻을 수 없는 것을 볼 수 있습니다. 또 다른 예를 살펴보겠습니다.

ini_set('error_reporting', E_WARNING);
echo get_cfg_var('error_reporting'), PHP_EOL; // 32759,只返回.ini的内容
echo ini_get('error_reporting'), PHP_EOL; // 2,返回当前配置运行时的状态
로그인 후 복사

ini_set()을 사용하여 error_reporting 매개변수를 동적으로 설정한 후, get_cfg_var()는 ini_set()에 의해 설정된 값을 반환하는 반면, ini_get()은 여전히 ​​php.ini 파일에 구성된 값을 얻습니다.

위의 두 예제에서 두 함수의 차이점을 확인할 수 있습니다.

  • get_cfg_var(), 사용자 정의된 구성 매개변수 값을 얻을 수 있지만 php.ini 파일만 우선하며 동적으로 수정된 매개변수는 얻을 수 없습니다.

  • ini_get() 값은 사용자 정의된 구성 매개변수 값을 가져올 수 없습니다. 이는 현재 동적 스크립트 런타임 구성의 적용을 받습니다. 즉, ini_set()의 수정된 매개변수 값을 얻을 수 있습니다

ini_get_all()

얻는 것은 Swoole, xDebug 또는 mysqlnd와 같이 우리가 설치한 일부 확장 프로그램의 구성 정보와 같은 데이터 세트입니다.

print_r(ini_get_all('swoole'));
echo PHP_EOL;
// Array
// (
//     [swoole.display_errors] => Array
//         (
//             [global_value] => On
//             [local_value] => On
//             [access] => 7
//         )

//     [swoole.enable_coroutine] => Array
//         (
//             [global_value] => On
//             [local_value] => On
//             [access] => 7
//         )

//     [swoole.enable_library] => Array
//         (
//             [global_value] => On
//             [local_value] => On
//             [access] => 7
//         )

//     [swoole.enable_preemptive_scheduler] => Array
//         (
//             [global_value] => Off
//             [local_value] => Off
//             [access] => 7
//         )

//     [swoole.unixsock_buffer_size] => Array
//         (
//             [global_value] => 262144
//             [local_value] => 262144
//             [access] => 7
//         )

//     [swoole.use_shortname] => Array
//         (
//             [global_value] => 
//             [local_value] => 
//             [access] => 4
//         )

// )
로그인 후 복사

Swoole에 대해 작성한 모든 구성 정보가 배열 형식으로 반환되는 것을 볼 수 있습니다.

구성 정보 복원

ini_set()을 사용하여 매개변수 정보를 동적으로 설정한 후 php.ini 파일의 기본 구성으로 복원하려면 ini_restore() 함수를 직접 사용할 수 있습니다.

ini_restore('error_reporting');
echo ini_get('error_reporting'), PHP_EOL; // 32759
로그인 후 복사

여전히 위 코드를 사용하여 우리는 error_reporting을 2로 수정했습니다. 이때 직접 ini_restore()를 사용하여 복원한 다음 ini_get()을 사용하여 error_reporting 매개변수가 PHP로 다시 복원되는 것을 확인합니다. .ini 파일. 정의의 원래 값입니다.

현재 로드된 구성 파일 경로 가져오기

서버를 인수할 때 첫 번째 단계는 종종 mysql의 my.ini 또는 nginx의 conf 관련 구성 파일 경로 및 PHP와 같은 관련 애플리케이션 구성 파일을 찾는 것입니다. php.ini 파일이 어디에 있는지 찾는 것입니다.

echo php_ini_loaded_file(), PHP_EOL;
// /usr/local/etc/php/7.3/php.ini

echo php_ini_scanned_files(), PHP_EOL;
로그인 후 복사

php_ini_loaded_file()을 직접 사용하면 현재 실행 중인 스크립트 환경에 로드된 php.ini 파일의 경로를 쉽게 얻을 수 있습니다. php_ini_scanned_files() 함수는 php.ini 파일을 스캔할 수 있는 모든 경로를 쉼표로 구분된 형식으로 반환합니다.

사실 이 두 매개변수는 phpinfo()에 반영되지만, 프로덕션 환경에서는 phpinfo()를 직접 사용할 수 없는 경우가 많습니다. 이 두 함수 또는 phpinfo()와 비교할 때 더 나은 해결책은 명령줄에서 직접 php.ini 파일의 위치를 ​​찾는 것입니다.

php --ini
# Configuration File (php.ini) Path: /usr/local/etc/php/7.3
# Loaded Configuration File:         /usr/local/etc/php/7.3/php.ini
# Scan for additional .ini files in: /usr/local/etc/php/7.3/conf.d
# Additional .ini files parsed:      /usr/local/etc/php/7.3/conf.d/ext-opcache.ini

php -i | grep "Configuration"
# Configuration File (php.ini) Path => /usr/local/etc/php/7.3
# Loaded Configuration File => /usr/local/etc/php/7.3/php.ini
# Configuration
로그인 후 복사

phpinfo()

phpinfo()에 대해서는 너무 많이 설명할 필요가 없습니다. 그 내용은 PHP를 배우는 개발자에게 필수 과정입니다. 여기서는 phpinfo() 함수의 매개변수를 소개합니다. 예, 매개변수가 있으며 정보 전체가 아닌 일부만 표시할 수 있습니다.

  • INFO_GENERAL:配置的命令行、 php.ini 的文件位置、建立的时间、Web 服务器、系统及更多其他信息。

  • INFO_CREDITS:PHP 贡献者名单。参加 phpcredits()。

  • INFO_CONFIGURATION:当前PHP指令的本地值和主值。参见 ini_get()。

  • INFO_MODULES:已加载的模块和模块相应的设置。参见 get_loaded_extensions()。

  • INFO_ENVIRONMENT:环境变量信息也可以用 $_ENV 获取。

  • INFO_VARIABLES:显示所有来自 EGPCS (Environment, GET, POST, Cookie, Server) 的 预定义变量。

  • INFO_LICENSE:PHP许可证信息。参见 » license FAQ。

  • INFO_ALL:显示以上所有信息。

phpinfo(INFO_MODULES);
로그인 후 복사

上面的代码在页面中所显示的信息就只是已加载模式相关的配置信息了。phpinfo() 会直接输出到页面上,如果想将它的内容保存在一个变量中,我们需要使用输出缓冲控制来进行操作。我们将在后面的文章中讲到这方面的内容。这里就简单的给一段代码。

ob_start();
phpinfo();
$v = ob_get_contents();
ob_end_clean();

echo $v;
로그인 후 복사

总结

不看不知道,一看吓一跳。原来只是使用过 ini_set() 去修改运行时内存大小,但直到今天才知道原来 ini_set() 并不是所有的配置都可以修改的,每个参数是否能动态修改还要看它的参数类型。

而且上面还忘了说了,我们并不能使用 ini_set() 去增加配置参数。也就是说,使用 ini_set("B", "TEST_B") 增加一个 B 参数,然后直接使用 ini_get() 也是无法获取的。

而且简单的获取参数信息的两个函数也有这么多的不同,phpinfo() 原来也有这么多参数。果然,文档才是最好的学习资料。旅程还没有停止,我们刷文档的脚步依然不能停,一起加油冲冲冲!!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202005/source/%E5%85%B3%E4%BA%8Ephp%E7%9A%84ini%E6%96%87%E4%BB%B6%E7%9B%B8%E5%85%B3%E6%93%8D%E4%BD%9C%E5%87%BD%E6%95%B0%E6%B5%85%E6%9E%90.php
로그인 후 복사

推荐学习:php视频教程

위 내용은 PHP의 ini 파일 관련 동작 기능에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿