Cookies voor statistiek en advertenties
We gebruiken cookies voor statistiek en voor advertenties, allebei naar Google. Weigeren verandert niets aan wat je te zien krijgt.Lees de privacypagina
INI
Secties en sleutel-waardeparen. Het oudste configuratieformaat dat nog dagelijks in gebruik is.
INI
INI is een puur tekstformaat dat in elke editor opengaat. Het wordt gebruikt voor bewerken.
De extensie is .ini en de volledige naam INI Configuration. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.
Het gaat terug tot 1985.
Aan een formaat dat zo lang leesbaar is gebleven kun je iets toevertrouwen dat je over tien jaar terug wilt hebben.
Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.
Het gaat overal nog open en oudere programma’s schrijven het nog, maar er wordt niets nieuws meer omheen gebouwd. Converteer wat je wilt bewaren en kies het niet voor iets dat vandaag begint.
INI heeft een commentaarsyntaxis — dat is het verschil tussen een bestand dat een mens onderhoudt en een bestand dat een programma schrijft. Bij het converteren naar een formaat zonder commentaar zijn ze het eerste wat verdwijnt, en er wordt niet gewaarschuwd.
Notepad en Visual Studio Code lezen het, en de meeste programma’s van dezelfde soort ook.
Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.
Geen enkele browser leest het.
Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.
INI is bedoeld om te openen en te wijzigen. Houd het bestand in dit formaat zolang het werk loopt, en exporteer eruit wanneer er een afgeronde versie nodig is.
INI komt uit vroeg Windows, waar het de instellingen droeg voor het systeem en voor elke applicatie. Het is nooit gestandaardiseerd — geen document definieert het, geen commissie bezit het, en elk programma dat er eentje leest implementeert zijn eigen dialect.
De kern is universeel: sectiekoppen tussen vierkante haken, en sleutel-is-gelijk-aan-waarde-regels eronder. Alles voorbij die kern is een gok. Of een puntkomma of een hekje een commentaar begint. Of een waarde tussen aanhalingstekens mag staan, en wat daarmee gebeurt. Of sleutels hoofdlettergevoelig zijn. Of een waarde op een tweede regel mag doorlopen. Of secties mogen nesten, wat in de meeste dialecten niet kan. Twee programma’s die hetzelfde bestand lezen kunnen legitiem van mening verschillen, en allebei hebben ze gelijk.
Schrijf timeout=30 en het bestand bevat de tekens 3 en 0. Of dat een getal wordt, en of het seconden of milliseconden betekent, wordt volledig bepaald door het programma dat het leest. Hetzelfde geldt voor true, yes, on en 1 — allemaal gangbare manieren om een booleaanse waarde op te schrijven, geen ervan gedefinieerd door het formaat, en elke bibliotheek accepteert een andere deelverzameling.
Dat is het praktische verschil met JSON, YAML of TOML, die allemaal typen kennen. Daarom komen INI-configuratiebestanden meestal met documentatie of commentaar dat uitlegt wat de waarden betekenen, en daarom is een configuratiebestand tussen twee implementaties van hetzelfde programma verplaatsen gevaarlijker dan het lijkt.
Windows, nog steeds, op plekken: desktop.ini dat bepaalt hoe een map wordt weergegeven, boot- en driverconfiguratie, en een lange staart applicaties die nooit een reden hadden om te veranderen. Games zijn een bijzonder rijke bron — een enorm aantal pc-games bewaart hun beeld- en besturingsinstellingen in een INI, wat verklaart waarom tweakgidsen vol staan met instructies om er eentje te bewerken.
Elders overleeft het in tooling van vóór de moderne alternatieven: PHP’s php.ini, Git’s configuratie, Python’s setup.cfg en verpakkingstools, systemd-unitbestanden, en talloze kleine hulpprogramma’s. Nieuwe projecten kiezen doorgaans TOML of YAML, maar niets in bestaande installaties wordt herschreven.
Elke teksteditor. Twee regels dekken het meeste van de schade die mensen aanrichten: kopieer het bestand voordat je iets verandert, en verander één ding tegelijk — een programma dat niet start door een verkeerd configuratiebestand vertelt zelden welke regel het probleem was.
Dan de details die daadwerkelijk storingen veroorzaken. Sla op als UTF-8 zonder bytevolgordemarkering, want de onzichtbare bytes aan het begin van het bestand breken bij veel parsers de eerste sectiekop. Voeg geen spaties toe rond het is-gelijk-aan-teken tenzij je weet dat de lezer ze afsnijdt, want sommige doen dat niet en je waarde wordt een leidende spatie plus de tekst. En laat aanhalingstekens met rust: staan de bestaande waarden ongequoteerd, dan kunnen aanhalingstekens toevoegen twee tekens aan de waarde toevoegen in plaats van hem af te bakenen.
Voor de hand liggend zijn. Iemand die het bestand nog nooit heeft gezien kan het openen, de instelling fullscreen vinden, false naar true veranderen, en gelijk hebben. Dat is een echte eigenschap en het is waarom het formaat alles overleefde dat het in de jaren negentig moest vervangen.
Het faalt ook gracieus in het ondiepe geval: een onbekende sleutel wordt meestal genegeerd in plaats van fataal, dus een configuratiebestand geschreven voor een nieuwere versie van een programma werkt over het algemeen nog met een oudere. De alternatieven zijn strenger, wat beter is voor correctheid en slechter voor wie om middernacht de instellingen van een spel bewerkt.
Wanneer de configuratie is uitgegroeid boven platte secties van tekenreeksen. Geneste structuur, lijsten, datums, getallen die getallen moeten zijn, of enige waarde waarbij het verschil tussen de tekenreeks "false" en de booleaanse waarde false ertoe doet — dat zijn allemaal punten waar INI ophoudt te helpen en bugs begint te verbergen.
TOML werd ontworpen als het antwoord op precies dit: het ziet eruit als INI, dus niemand hoeft een nieuwe vorm te leren, en het heeft een specificatie, echte typen en gedefinieerde nesting. YAML is het andere gangbare doel en is krachtiger en aanzienlijk makkelijker om verkeerd te doen. Staat een bestand op het punt te groeien, dan is TOML de kleinere stap en degene die de leesbaarheid behoudt die INI de moeite waard maakte.
INI-bestanden geschreven op Windows gebruiken doorgaans CRLF-regeleinden, terwijl bestanden van Unix-tools LF gebruiken. De meeste parsers accepteren beide zonder klagen, maar een bestand dat handmatig bewerkt is met een editor die stilzwijgend de regeleindestijl verandert, kan bij een strengere lezer verrassend falen.
Dit is zelden de eerste plek om te kijken bij een probleem, maar het is de moeite waard te weten als een bestand dat op het ene systeem werkt op het andere weigert, vooral bij configuratie die via versiebeheer tussen Windows- en Linux-machines reist.
Niets in de kern van het formaat verbiedt dezelfde sleutel twee keer binnen één sectie te schrijven, en implementaties zijn het daar niet over eens: sommige nemen de laatste waarde, sommige de eerste, en een enkele bouwt er stilzwijgend een lijst van.
Dat maakt een dubbele sleutel een van de stilste bugs die het formaat kan produceren — het bestand ziet er geldig uit, laadt zonder fout, en het gedrag hangt af van een implementatiedetail die nergens gedocumenteerd staat. Grep het bestand op een sleutelnaam voordat je een moeilijk te reproduceren instellingprobleem toeschrijft aan iets anders.
| Extensie | .ini, .cfg, .conf |
|---|---|
| Mediatype | text/plain |
| Voor het eerst gepubliceerd | 1985 |
Elke teksteditor. Kopieer het bestand eerst, verander één instelling tegelijk, en sla op als UTF-8 zonder bytevolgordemarkering — die onzichtbare leidende bytes breken bij veel parsers de eerste sectiekop.
Dat hangt af van het programma, want er is geen specificatie. De puntkomma is de oudere Windows-conventie en het hekje is gangbaar in Unix-geïnspireerde tools. Volg wat de bestaande commentaren in het bestand gebruiken.
Niet echt. De meeste implementaties behandelen een kop als [database.primary] als één sectie waarvan de naam toevallig een punt bevat, in plaats van als nesting. Heeft je configuratie echt structuur nodig, dan is dat het moment om naar TOML te gaan.
Meestal niet, en ze toevoegen kan actief schadelijk zijn — sommige parsers behandelen aanhalingstekens als onderdeel van de waarde in plaats van als afbakening. Volg wat de bestaande vermeldingen in het bestand doen.
TOML ziet eruit als INI en heeft wat INI mist: een specificatie, echte datatypen, gedefinieerde nesting, lijsten en datums. INI-waarden zijn altijd tekenreeksen tot een programma anders besluit, wat waar de meeste configuratiebugs vandaan komen.
Gangbare oorzaken zijn een bestand bewerken dat het programma eigenlijk niet leest — veel applicaties houden een gebruikerskopie apart van de geïnstalleerde — een typfout in de sectiekop, of het programma dat draaide terwijl je opsloeg. Controleer eerst op een tweede kopie van het bestand.