2013-04-18 2 views
0

données INI ressemble à ceci:analyseur PHP RAW INI ne parvient pas à analyser correctement les valeurs

[datasources] 
live.dsn = "mysql:host=localhost;dbname=main" 
live.user = "root" 
live.pass = 

J'utilise parse_ini_file().

  • avec INI_SCANNER_RAWlive.dsn est analysé de manière incorrecte ("mysql:host)
  • avec INI_SCANNER_NORMAL la valeur de live.dsn est correcte

Mais je ne peux pas utiliser INI_SCANNER_NORMAL car il remplacera également des constantes "sur" avec 1 et ainsi de suite (ne veulent pas que) ... Y at-il une solution ou dois-je créer mon propre analyseur? Je utilise PHP 5.3.

+0

Veuillez ajouter votre version de PHP dans la question. – hakre

+0

Je voulais dire à l'intérieur de la question;) – hakre

Répondre

1
var_dump(parse_ini_string('[datasources] 
live.dsn = "mysql:host=localhost;dbname=main" 
live.user = "root"', false, INI_SCANNER_RAW)); 

=>

array(2) { 
    ["live.dsn"]=> 
    string(32) "mysql:host=localhost;dbname=main" 
    ["live.user"]=> 
    string(4) "root" 
} 

Je suis incapable de le reproduire. (Il ne fonctionne pas aussi pour parse_ini_file.) Il fonctionne en PHP 5.3 et PHP tronc ...


Je vois que c'était un bogue dans les versions PHP plus anciennes, voir https://bugs.php.net/bug.php?id=51094. Simplement mettre à jour, alors ça devrait marcher. Si vous ne pouvez pas mettre à niveau, vous devez écrire votre propre analyseur ini.

+0

http://3v4l.org/fSZkG –

+0

@OneTrickPony Ok, alors c'était un bug ... Mise à jour ma réponse. (J'ai PHP 5.3.15, la première version qui fonctionne xD) – bwoebi

+0

Fini en utilisant quelque chose comme [this] (http://www.php.net/manual/en/function.parse-ini-string.php#94192). Probablement plus lent, mais il semble que je n'ai pas le choix :( –

Questions connexes