2016-07-03 17 views
1

Ich habe eine Ini-Datei, die von einem externen Programm kommt, über das ich keine Kontrolle habe. Die INI-Datei nicht über doppelte Anführungszeichen um die Werte Beispiel:Verwendung der PHP-Funktion parse_ini_file() für eine ungültige Ini-Datei

[Setup] 
C SetupCode=Code of the currently installed setup (JOW 
C machine configuration). Use a maximum of 8 characters. 

mit parse_ini_file() gibt mir: syntax error, unexpected ')' Ich denke, ich sollte die Datei roh in php lesen und doppelte Anführungszeichen um die Werte wie folgt hinzu:

[Setup] 
C SetupCode="Code of the currently installed setup (JOW 
C machine configuration). Use a maximum of 8 characters." 

Ist dies die beste Vorgehensweise, und wenn ja, wie würde ich es tun?

+0

ini-Dateien normalerweise benötigen keine doppelte Anführungszeichen um die Werte. Siehe https://en.wikipedia.org/wiki/INI_file – PaulH

+0

@PaulH Es gibt kein formelles Standardformat für INI-Dateien. Es ist ein * informeller * Standard. Einige Dialekte unterstützen das Zitieren (insbesondere Windows-INF-Dateien, die ein INI-Format für einen bestimmten Zweck verwenden), andere nicht und andere benötigen es möglicherweise. –

+0

@Rhymoid ja, aber Mini scheint zu denken, Zitate sind notwendig für 'parse_ini_file()' – PaulH

Antwort

3

Das INI-Dateiformat ist ein informeller Standard. Variationen existieren, siehe https://en.wikipedia.org/wiki/INI_file.
C scheint für den Kommentar zu stehen, aber parse_ini_file() versteht das nicht. So lesen Sie die INI-Datei in einem String, ersetzen die C mit ;, verwenden Sie dann parse_ini_string()

<?php 
// $ini_string = file_get_contents(...); 

// test data 
$ini_string = " 
[Setup] 
C SetupCode=Code of the currently installed setup (JOW 
C machine configuration). Use a maximum of 8 characters. 
SetupCode=my C ode 
"; 

// replace 'C ' at start of line with '; ' multiline 
$ini_string = preg_replace('/^C /m', '; ', $ini_string); 

$ini_array = parse_ini_string($ini_string); 


print_r($ini_array); // outputs Array ([SetupCode] => my C ode) 
+0

Ich lösche meine Antwort, aber Sie können 'str_replace' verwenden, das ist optimal zum Ersetzen von Text,' str_replace ('C', ';', $ ini_string) ' – Naumov

+0

@Naumov str_replace wird in diesem Fall den Trick tun, aber nicht in allen Fällen. C wird nur ersetzt, wenn das erste Zeichen einer Zeile gefolgt von einem Leerzeichen steht. – PaulH

+1

ja dein Recht! – Naumov