Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Einführung in die INI-Datei-bezogenen Betriebsfunktionen von PHP

Detaillierte Einführung in die INI-Datei-bezogenen Betriebsfunktionen von PHP

醉折花枝作酒筹
醉折花枝作酒筹nach vorne
2021-07-02 15:24:081480Durchsuche

In kleinen Unternehmen, insbesondere Unternehmerunternehmen, gehört die Einrichtung des gesamten Servers in der Regel zu den Aufgaben unserer PHP-Entwicklungsingenieure. Die wichtigste davon ist die Konfiguration der php.ini-Datei des Servers. Einige Parameter haben einen tiefgreifenden Einfluss auf die Leistung des Servers, und einige Parameter können dynamisch angegeben und abgerufen werden, wenn PHP ausgeführt wird. Heute lernen wir einige Betriebsfunktionen im Zusammenhang mit der Datei php.ini kennen.

Detaillierte Einführung in die INI-Datei-bezogenen Betriebsfunktionen von PHP

Legen Sie die Konfigurationsparameter der INI-Datei dynamisch fest

Ich glaube, diese Funktion ist jedem bekannt und im Grunde wird jeder, der PHP-Entwicklung gemacht hat, sie verwendet haben. Einige Parameter können jedoch nicht geändert werden. Wussten Sie das?

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

Bitte beachten Sie die Kommentare. Der erste Kommentar lautet PHP_INI_SYSTEM und dieser Parameter kann nicht geändert werden. Ja, ich glaube, Sie sind schlau und haben herausgefunden, dass diese Parameter entsprechende Typen haben. PHP_INI_SYSTEM bedeutet, dass es nur in php.ini oder httpd.conf geändert werden kann und nicht geändert werden kann, wenn die Sprache dynamisch ausgeführt wird.

Es gibt vier Arten verschiedener php.ini-Konfigurationsparameter:

  • PHP_INI_USER: Kann in Benutzerskripten (z. B. ini_set()) oder der Windows-Registrierung (seit PHP 5.3) und .user.ini festgelegt werden

  • PHP_INI_PERDIR: Kann in php.ini, .htaccess oder httpd.conf eingestellt werden

  • PHP_INI_SYSTEM: Kann in php.ini oder httpd.conf eingestellt werden

  • PHP_INI_ALL: Kann überall eingestellt werden

Mit anderen Worten Mit ini_set() können wir Parameter vom Typ PHP_INI_USER und PHP_INI_ALL festlegen, während die anderen beiden nur in php.ini oder anderen Konfigurationsdateien festgelegt und geändert werden können. Informationen zu den spezifischen Typen, die den Konfigurationsparametern entsprechen, finden Sie in der entsprechenden PHP-Dokumentation.

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

Rufen Sie die Konfigurationsinformationen in der INI-Datei ab

Natürlich gibt es keine Einschränkungen beim Lesen der Konfigurationsinformationen in der php.ini Datei. Es kann direkt gelesen werden. Zum Lesen können wir zwei Funktionen verwenden: get_cfg_var() und ini_get(). Darüber hinaus gibt es eine Funktion ini_get_all(), die Konfigurationsinformationen in Form einer Array-Sammlung abrufen kann. Schauen wir sie uns einzeln an.

get_cfg_var() und ini_get()

lesen beide einzelne Konfigurationsparameterinformationen.

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; //

Die beiden oben genannten Punkte müssen wir nicht erklären. Auf den letzten Punkt müssen wir achten. Wir definieren einen benutzerdefinierten Konfigurationsparameter A in der Datei php.ini. Es ist ersichtlich, dass get_cfg_var() diese Informationen normal abrufen kann, ini_get() jedoch nicht. Schauen wir uns ein anderes Beispiel an.

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

Nach der Verwendung von ini_set() zum dynamischen Festlegen des Parameters error_reporting gibt get_cfg_var() den von ini_set() festgelegten Wert zurück, während ini_get() weiterhin den in der Datei php.ini konfigurierten Wert erhält.

Sie können den Unterschied zwischen diesen beiden Funktionen anhand der beiden obigen Beispiele erkennen:

  • get_cfg_var(), Sie können benutzerdefinierte Konfigurationsparameterwerte abrufen, aber nur die Datei php.ini hat Vorrang und dynamisch geänderte Parameter können nicht abgerufen werden Der Wert

  • ini_get() kann den benutzerdefinierten Konfigurationsparameterwert nicht abrufen. Er unterliegt der aktuellen dynamischen Skriptlaufzeitkonfiguration, das heißt, der geänderte Parameterwert von ini_set() kann

ini_get_all()

erhalten

Was es erhält, ist eine Reihe von Daten, z. B. Konfigurationsinformationen einiger von uns installierter Erweiterungen wie Swoole, xDebug oder 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
//         )

// )

Es ist ersichtlich, dass alle Konfigurationsinformationen, die wir für Swoole erstellt haben, in Form eines Arrays zurückgegeben werden.

Konfigurationsinformationen wiederherstellen

Nachdem wir ini_set() zum dynamischen Festlegen von Parameterinformationen verwendet haben und diese auf die Standardkonfiguration in der Datei php.ini wiederherstellen möchten, können wir direkt eine ini_restore()-Funktion verwenden.

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

Unter Verwendung des obigen Codes wurde error_reporting von uns auf 2 geändert. Zu diesem Zeitpunkt verwenden wir ini_restore() direkt, um es wiederherzustellen, und verwenden dann ini_get(), um sicherzustellen, dass der Parameter error_reporting wieder im PHP wiederhergestellt wird .ini-Datei Der ursprüngliche Wert der Definition.

Rufen Sie den aktuell geladenen Konfigurationsdateipfad ab

Wenn Sie einen Server übernehmen, besteht der erste Schritt häufig darin, die zugehörigen Anwendungskonfigurationsdateien zu finden, z. B. my.ini von mysql oder conf-bezogene Konfigurationsdateipfade von nginx und PHP. Unser erster Schritt ist herauszufinden, wo sich die Datei php.ini befindet.

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

echo php_ini_scanned_files(), PHP_EOL;

Wir können den Pfad der php.ini-Datei, die in die aktuell ausgeführte Skriptumgebung geladen wird, einfach ermitteln, indem wir php_ini_loaded_file() direkt verwenden. Die Funktion php_ini_scanned_files() gibt alle Pfade, die die Datei php.ini scannen können, in kommagetrennter Form zurück.

Tatsächlich spiegeln sich diese beiden Parameter in phpinfo() wider, aber oft können wir phpinfo() nicht direkt in der Produktionsumgebung verwenden. Im Vergleich zu diesen beiden Funktionen oder phpinfo() besteht eine bessere Lösung darin, den Speicherort der php.ini-Datei direkt in der Befehlszeile zu finden.

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()

Über phpinfo() müssen wir nicht zu viel erklären. Was darin enthalten ist, sollte ein Pflichtkurs für Entwickler sein, die den Umgang mit PHP erlernen. Hier stellen wir lediglich die Parameter der Funktion phpinfo() vor. Ja, es verfügt über Parameter und kann nicht alle, sondern nur einen Teil der Informationen anzeigen.

  • 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视频教程

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in die INI-Datei-bezogenen Betriebsfunktionen von PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:segmentfault.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen