Introduction détaillée aux fonctions opérationnelles liées au fichier ini de php

醉折花枝作酒筹
Libérer: 2023-03-11 07:56:01
avant
1615 Les gens l'ont consulté

Dans les petites entreprises, notamment les entreprises entrepreneuriales, la mise en place de l'ensemble du serveur fait généralement partie des responsabilités de nos ingénieurs de développement PHP. Parmi eux, le plus important est de configurer le fichier php.ini du serveur. Certains paramètres auront un impact profond sur les performances du serveur, et certains paramètres peuvent être spécifiés et obtenus dynamiquement lorsque PHP est en cours d'exécution. Aujourd'hui, nous allons apprendre quelques fonctions opérationnelles liées au fichier php.ini.

Introduction détaillée aux fonctions opérationnelles liées au fichier ini de php

Définir dynamiquement les paramètres de configuration du fichier ini

Je pense que cette fonction est familière à tout le monde, et fondamentalement, toute personne ayant fait du développement PHP l'aura utilisée. Cependant, certains paramètres ne sont pas modifiables. Le saviez-vous ?

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
Copier après la connexion

Veuillez faire attention aux commentaires. Le premier commentaire dit PHP_INI_SYSTEM, et ce paramètre ne peut pas être modifié. Oui, je pense que vous êtes intelligent et que vous avez compris que ces paramètres ont des types correspondants. PHP_INI_SYSTEM signifie qu'il ne peut être modifié que dans php.ini ou httpd.conf, et ne peut pas être modifié lorsque le langage s'exécute de manière dynamique.

Il existe quatre types de paramètres de configuration php.ini différents :

  • PHP_INI_USER : peuvent être définis dans des scripts utilisateur (tels que ini_set()) ou dans le registre Windows (depuis PHP 5.3) et .user.ini

  • PHP_INI_PERDIR : Peut être défini dans php.ini, .htaccess ou httpd.conf

  • PHP_INI_SYSTEM : Peut être défini dans php.ini ou httpd.conf

  • PHP_INI_ALL : Peut être défini n'importe où

En d'autres termes , en utilisant ini_set(), nous pouvons définir des paramètres de type PHP_INI_USER et PHP_INI_ALL, tandis que les deux autres ne peuvent être définis et modifiés que dans php.ini ou d'autres fichiers de configuration. Pour les types spécifiques correspondant aux paramètres de configuration, veuillez vous référer à la documentation PHP appropriée.

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

Obtenez les informations de configuration dans le fichier ini

Bien sûr, il n'y a aucune restriction sur la lecture des informations de configuration dans le php.ini déposer. Il peut être lu directement Nous pouvons utiliser deux fonctions pour lire, ce sont : get_cfg_var() et ini_get(). De plus, il existe une fonction ini_get_all() qui peut obtenir des informations de configuration sous la forme d'une collection de tableaux. Regardons-les un par un.

get_cfg_var() et ini_get()

lisent tous deux les informations d'un seul paramètre de configuration.

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; //
Copier après la connexion

Il n'est pas nécessaire d'expliquer les deux éléments ci-dessus. Ce à quoi nous devons prêter attention, c'est le dernier. Nous définissons un paramètre de configuration personnalisé A dans le fichier php.ini. On peut voir que get_cfg_var() peut obtenir ces informations normalement, mais ini_get() ne le peut pas. Regardons un autre exemple.

ini_set('error_reporting', E_WARNING);
echo get_cfg_var('error_reporting'), PHP_EOL; // 32759,只返回.ini的内容
echo ini_get('error_reporting'), PHP_EOL; // 2,返回当前配置运行时的状态
Copier après la connexion

Après avoir utilisé ini_set() pour définir dynamiquement le paramètre error_reporting, get_cfg_var() renvoie la valeur définie par ini_set(), tandis que ini_get() obtient toujours la valeur configurée dans le fichier php.ini.

Vous pouvez voir la différence entre ces deux fonctions à partir des deux exemples ci-dessus :

  • get_cfg_var(), vous pouvez obtenir des valeurs de paramètres de configuration personnalisées, mais seul le fichier php.ini prévaut et les paramètres modifiés dynamiquement ne peuvent pas être obtenus La valeur

  • ini_get() ne peut pas obtenir la valeur du paramètre de configuration personnalisée. Elle est soumise à la configuration actuelle de l'exécution du script dynamique, c'est-à-dire que la valeur modifiée du paramètre ini_set() peut être obtenue

ini_get_all()

Ce qu'il obtient, c'est un ensemble de données, telles que des informations de configuration de certaines extensions que nous avons installées, telles que Swoole, xDebug ou 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
//         )

// )
Copier après la connexion

On peut voir que toutes les informations de configuration que nous avons créées pour Swoole sont renvoyées sous la forme d'un tableau.

Restaurer les informations de configuration

Après avoir utilisé ini_set() pour définir dynamiquement les informations sur les paramètres, si nous voulons les restaurer à la configuration par défaut dans le fichier php.ini, nous pouvons directement utiliser une fonction ini_restore().

ini_restore('error_reporting');
echo ini_get('error_reporting'), PHP_EOL; // 32759
Copier après la connexion

Toujours en utilisant le code ci-dessus, error_reporting a été modifié par nos soins à 2. Pour le moment, nous utilisons directement ini_restore() pour le restaurer, puis utilisons ini_get() pour voir que le paramètre error_reporting est restauré dans le php Fichier .ini. La valeur originale de la définition.

Obtenir le chemin du fichier de configuration actuellement chargé

Lorsque vous prenez le contrôle d'un serveur, la première étape consiste souvent à trouver ses fichiers de configuration d'application associés, tels que les chemins des fichiers de configuration associés à my.ini de MySQL ou conf de nginx, et PHP Notre première étape est de trouver où se trouve le fichier php.ini.

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

echo php_ini_scanned_files(), PHP_EOL;
Copier après la connexion

Nous pouvons facilement obtenir le chemin du fichier php.ini chargé dans l'environnement de script en cours d'exécution en utilisant directement php_ini_loaded_file(). La fonction php_ini_scanned_files() renvoie tous les chemins pouvant analyser le fichier php.ini sous forme séparée par des virgules.

En fait, ces deux paramètres sont reflétés dans phpinfo(), mais souvent nous ne pouvons pas utiliser phpinfo() directement dans l'environnement de production. Par rapport à ces deux fonctions ou à phpinfo(), une meilleure solution consiste à trouver l'emplacement du fichier php.ini directement sur la ligne de commande.

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
Copier après la connexion

phpinfo()

À propos de phpinfo(), nous n'avons pas besoin de trop expliquer. Ce qu'il contient devrait être un cours obligatoire pour les développeurs qui apprennent à utiliser PHP. Ici, nous introduisons simplement les paramètres de la fonction phpinfo(). Oui, il a des paramètres et ne peut afficher qu’une partie des informations au lieu de la totalité.

  • 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);
Copier après la connexion

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

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

echo $v;
Copier après la connexion

总结

不看不知道,一看吓一跳。原来只是使用过 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
Copier après la connexion

推荐学习:php视频教程

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
php
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal