Heim php教程 php手册 一个非常完美的读写ini格式的PHP配置类分享

一个非常完美的读写ini格式的PHP配置类分享

Jun 06, 2016 pm 08:10 PM
读写

这篇文章主要介绍了一个非常完美的读写ini格式的PHP配置类分享,本文给出类代码、使用例子和配置文件例子,需要的朋友可以参考下

基本满足所有配置相关的需求。

/** * 解析.ini格式的配置文件为一个树形结构的对象 * 配置文件不同section通过冒号继承 * 默认根据hostname确定使用的section,如果不能确定就优先使用production * 检测环境的时候总是优先检测production,其余section按定义顺序检测 * * @author ares@phpdr.net * */ class Config { /** * 解析后的配置文件 * * @var stdClass */ private $config; /** * 一个二维数组,键是配置文件的section * 值是一个数组或回调函数 * 如果是数组则计算hostname是否在数组中决定是否使用该section * 如果是回调函数通过返回值true或false来确定是否使用该section * * @var array */ private $map = array (); /** * section会被解析,:表示继承 * 配置项中的'.'用来区分层级关系 * section中的'.'不会被解析,配置中的数组不受影响。 * * @param string $conf * @throws ErrorException * @return stdClass */ function __construct($conf, $map) { $config = $this->parseIni ( ( object ) parse_ini_string ( $conf, true ) ); if (array_key_exists ( 'production', $map )) { $production = $map ['production']; unset ( $map ['production'] ); $map = array_merge ( array ( 'production' => $production ), $map ); } else { throw new ErrorException ( 'production section not found in config' ); } $section = 'production'; $hostname = gethostname (); foreach ( $map as $k => $v ) { if (is_array ( $v )) { foreach ( $v as $v1 ) { if ($v1 == $hostname) { $section = $k; break 2; } } } elseif (is_callable ( $v )) { if (true == call_user_func ( $v )) { $section = $k; break; } } else { throw new ErrorException ( 'Wrong map value in ' . __CLASS__ ); } } $this->config = $config->$section; } /** * 总是返回配置对象 * * @return mixed */ function __get($key) { if (isset ( $this->config->$key )) { return $this->config->$key; } } /** * 切分 * * @param stdClass $v * @param string $k1 * @param mixed $v1 */ private function split($v, $k1, $v1) { $keys = explode ( '.', $k1 ); $last = array_pop ( $keys ); $node = $v; foreach ( $keys as $v2 ) { if (! isset ( $node->$v2 )) { $node->$v2 = new stdClass (); } $node = $node->$v2; } $node->$last = $v1; if (count ( $keys ) > 0) { unset ( $v->$k1 ); } } /** * parseIni * * @param object $conf * @return stdClass */ private function parseIni($conf) { $confObj = new stdClass (); foreach ( $conf as $k => $v ) { // 是section if (is_array ( $v )) { $confObj->$k = ( object ) $v; foreach ( $v as $k1 => $v1 ) { call_user_func ( array ( $this, 'split' ), $confObj->$k, $k1, $v1 ); } } else { call_user_func ( array ( $this, 'split' ), $confObj, $k, $v ); } } unset ( $conf ); // 处理继承 foreach ( $confObj as $k => $v ) { if (false !== strpos ( $k, ':' )) { if (0 === strpos ( $k, ':' )) { throw new ErrorException ( 'config ' . $k . ' is invalid, ':' can't be the first char' ); } elseif (1 $keys [1] )) { throw new ErrorException ( 'parent section ' . $keys [1] . ' doesn't exist in config file' ); } else { if (isset ( $confObj->$keys [0] )) { throw new ErrorException ( 'config is invalid, ' . $keys [0] . ' and ' . $k . ' conflicts' ); } else { $confObj->$keys [0] = $this->deepCloneR ( $confObj->$keys [1] ); $this->objectMergeR ( $confObj->$keys [0], $v ); unset ( $confObj->$k ); } } } } } return $confObj; } /** * php默认是浅克隆,,函数实现深克隆 * * @param object $obj * @return object $obj */ private function deepCloneR($obj) { $objClone = clone $obj; foreach ( $objClone as $k => $v ) { if (is_object ( $v )) { $objClone->$k = $this->deepCloneR ( $v ); } } return $objClone; } /** * 递归的合并两个对象 * * @param unknown $obj1 * @param unknown $obj2 */ private function objectMergeR($obj1, $obj2) { foreach ( $obj2 as $k => $v ) { if (is_object ( $v ) && isset ( $obj1->$k ) && is_object ( $obj1->$k )) { $this->objectMergeR ( $obj1->$k, $v ); } else { $obj1->$k = $v; } } } }

简单使用:

$_ENV ['config'] = new Config ( file_get_contents ( __DIR__ . '/config.ini' ), array ( 'development' => array ( 'localhost.localdomain', 'localhost' ), 'production' => array () ) );

配置文件示例:

[product] db.default.dsn="mysql:host=127.0.0.1;dbname=default" db.default.username=root db.default.password=123456 admin.username=admin admin.password=123456 php.error_reporting=E_ALL php.display_errors=no php.log_errors=yes php.error_log=APP_PATH'/resource/log/phpError.log' php.session.save_path=APP_PATH'/resource/data/session' [development:product] db.test1.dsn="mysql:host=127.0.0.1;dbname=test1" db.test1.username=root db.test1.password=123456 php.display_errors=yes

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verwendung von PHP zum Implementieren von Daten-Caching-, Lese- und Schreibfunktionen Verwendung von PHP zum Implementieren von Daten-Caching-, Lese- und Schreibfunktionen Sep 05, 2023 pm 05:45 PM

Verwendung von PHP zum Implementieren von Daten-Caching und Lese-/Schreibfunktionen. Durch Caching können häufig verwendete Daten im Speicher gespeichert werden, um die Lesegeschwindigkeit von Daten zu erhöhen. In PHP können wir verschiedene Methoden verwenden, um Daten-Caching sowie Lese- und Schreibfunktionen zu implementieren. In diesem Artikel werden zwei gängige Methoden vorgestellt: die Verwendung von Datei-Caching und die Verwendung von Speicher-Caching. 1. Beim Datei-Caching werden Daten zum späteren Lesen in Dateien gespeichert. Im Folgenden finden Sie einen Beispielcode, der Datei-Caching zum Lesen und Schreiben von Daten verwendet:

Praktischer Kampf: Festplatten-Io-Lese- und Schreibtest unter Linux Praktischer Kampf: Festplatten-Io-Lese- und Schreibtest unter Linux Feb 19, 2024 pm 03:40 PM

Concept fio, auch bekannt als FlexibleIOTester, ist eine von JensAxboe geschriebene Anwendung. Jens ist der Betreuer von blockIOsubsystem im LinuxKernel. FIO ist ein Tool zum Testen der Netzwerkdateisystem- und Festplattenleistung. Es wird häufig zur Überprüfung von Maschinenmodellen und zum Vergleich der Dateisystemleistung verwendet. Es sendet automatisch FIO-Befehle an eine Liste von Clustermaschinen und sammelt IOPS für kleine Dateien und Durchsatzdaten für große Dateien. rw=[mode]rwmixwrite=30 Im gemischten Lese- und Schreibmodus macht das Schreiben 30 % aus

Enthüllung des Innenlebens von Java-Dateioperationen Enthüllung des Innenlebens von Java-Dateioperationen Feb 28, 2024 am 08:22 AM

Dateisystem-APIDie internen Prinzipien von Java-Dateioperationen stehen in engem Zusammenhang mit der Dateisystem-API des Betriebssystems. In Java werden Dateioperationen vom Modul java.nio.file im Paket java.NIO bereitgestellt. Dieses Modul bietet eine Kapselung der Dateisystem-API, sodass Java-Entwickler eine einheitliche API verwenden können, um Dateioperationen auf verschiedenen Betriebssystemen durchzuführen. Dateiobjekt Wenn ein Java-Programm auf eine Datei zugreifen muss, muss es zunächst ein java.nio.file.Path-Objekt erstellen. Das Path-Objekt stellt einen Pfad im Dateisystem dar, der ein absoluter Pfad oder ein relativer Pfad sein kann. Sobald das Path-Objekt erstellt wurde, können Sie es verwenden, um verschiedene Eigenschaften der Datei abzurufen, beispielsweise den Namen

Entschlüsseln Sie die Lese- und Schreibmethoden zur Verarbeitung von DBF-Dateien in Java Entschlüsseln Sie die Lese- und Schreibmethoden zur Verarbeitung von DBF-Dateien in Java Mar 29, 2024 pm 12:39 PM

Entschlüsseln der Lese- und Schreibmethoden zur Verarbeitung von DBF-Dateien in Java DBF (dBaseFile) ist ein gängiges Datenbankdateiformat, das normalerweise zum Speichern von Tabellendaten verwendet wird. In Java-Programmen ist die Verarbeitung des Lesens und Schreibens von DBF-Dateien eine relativ häufige Anforderung. In diesem Artikel wird erläutert, wie Sie diesen Prozess mithilfe von Java entschlüsseln, und es werden spezifische Codebeispiele bereitgestellt. 1. Lesen von DBF-Dateien In Java erfordert das Lesen von DBF-Dateien normalerweise die Hilfe einer Bibliothek eines Drittanbieters, beispielsweise der dbfread-Bibliothek. Zuerst müssen Sie das Projekt konfigurieren

So erreichen Sie mit Golang schnelles Lesen und Schreiben von Webanwendungen So erreichen Sie mit Golang schnelles Lesen und Schreiben von Webanwendungen Jun 24, 2023 pm 03:24 PM

Mit der Popularität des Internets sind Webanwendungen zu einem wichtigen Instrument für Unternehmensmarketing und soziale Kommunikation geworden. Das schnelle Lesen und Schreiben von Webanwendungen ist ein grundlegendes Thema beim Design von Webanwendungen. Als effiziente und prägnante Programmiersprache kann Golang Programmierern dabei helfen, ihre Anforderungen an schnelles Lesen und Schreiben zu erfüllen. In diesem Artikel erfahren Sie, wie Sie mit Golang schnelles Lesen und Schreiben von Webanwendungen erreichen. 1. Stellen Sie eine Datenbankverbindung her, bevor Sie Golang zum schnellen Lesen und Schreiben von Webanwendungen verwenden

Umgang mit Datenkonsistenzproblemen beim gleichzeitigen Lesen und Schreiben in der Java-Entwicklung Umgang mit Datenkonsistenzproblemen beim gleichzeitigen Lesen und Schreiben in der Java-Entwicklung Jun 29, 2023 am 08:10 AM

Bei der Java-Entwicklung ist es sehr wichtig, sich mit dem Problem der Konsistenz gleichzeitiger Lese- und Schreibdaten zu befassen. Mit der Beliebtheit von Multithread- und verteilten Systemen wird das gleichzeitige Lesen und Schreiben von Daten immer häufiger, und wenn es nicht sorgfältig gehandhabt wird, kann es zu Dateninkonsistenzen kommen. In diesem Artikel werden mehrere gängige Methoden zum Umgang mit Problemen mit der Datenkonsistenz beim gleichzeitigen Lesen und Schreiben vorgestellt. 1. Sperrmechanismus verwenden Eine der am häufigsten verwendeten Methoden zum Umgang mit Problemen mit der Datenkonsistenz beim gleichzeitigen Lesen und Schreiben ist die Verwendung eines Sperrmechanismus (z. B. des synchronisierten Schlüsselworts oder der ReentrantLock-Klasse). Passieren

PHP implementiert Lese- und Schreibvorgänge von Excel-Dateien PHP implementiert Lese- und Schreibvorgänge von Excel-Dateien Jun 18, 2023 am 10:03 AM

Als häufig verwendetes Tabellendateiformat werden Excel-Dateien häufig im Entwicklungsprozess verwendet. Als häufig verwendete Programmiersprache unterstützt PHP auch Lese- und Schreibvorgänge in Excel-Dateien. In diesem Artikel stellen wir vor, wie Sie PHP zum Lesen und Schreiben von Excel-Dateien verwenden. Installieren Sie die PHPExcel-Bibliothek. PHPExcel ist eine Open-Source-PHP-Bibliothek, die problemlos Excel-Dateien lesen und schreiben kann. Es kann über Composer installiert oder direkt von GitHub heruntergeladen werden

Tutorial zum Lesen und Schreiben von PHP-Dateien: Detaillierte Einführung in die grundlegenden Methoden und Prozesse des Lesens und Schreibens Tutorial zum Lesen und Schreiben von PHP-Dateien: Detaillierte Einführung in die grundlegenden Methoden und Prozesse des Lesens und Schreibens Sep 06, 2023 pm 12:12 PM

Tutorial zum Lesen und Schreiben von PHP-Dateien: Detaillierte Einführung in die grundlegenden Methoden und Prozesse des Lesens und Schreibens. Einführung: Bei der Entwicklung von Webanwendungen sind Lese- und Schreibvorgänge für Dateien sehr grundlegende und häufige Vorgänge. PHP bietet eine Reihe von Methoden und Funktionen zum Implementieren von Lese- und Schreibvorgängen für Dateien und ist sehr einfach und benutzerfreundlich. In diesem Tutorial werden die grundlegenden Methoden und Prozesse zum Lesen und Schreiben von Dateien in PHP ausführlich vorgestellt und Codebeispiele gegeben. 1. Dateien lesen und öffnen Bevor Sie mit dem Lesen von Dateien beginnen, müssen Sie die Dateien zunächst öffnen. Kann über die Funktion fopen() geöffnet werden

See all articles