【问题标题】:PHP RAW INI parser fails to parse values correctlyPHP RAW INI 解析器无法正确解析值
【发布时间】:2013-04-11 20:20:27
【问题描述】:

INI 数据如下所示:

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

我正在使用parse_ini_file()

  • INI_SCANNER_RAW live.dsn 解析不正确 ("mysql:host)
  • INI_SCANNER_NORMALlive.dsn的值是正确的

但我不能使用INI_SCANNER_NORMAL,因为那样它也会替换常量,用1 替换“on”等等(不希望这样)... 有什么修复方法还是我必须创建我自己的解析器?

我使用的是 PHP 5.3。

【问题讨论】:

  • 请在问题中添加您的 PHP 版本。
  • 我的意思是在问题里面 ;)

标签: php parsing ini


【解决方案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"
}

我无法复制它。 (它也不适用于parse_ini_file。)它适用于 PHP 5.3 和 PHP 主干...


我发现这是旧 PHP 版本中的一个错误,请参阅 https://bugs.php.net/bug.php?id=51094 。只需升级,然后它应该可以工作。如果你无法升级,你真的必须编写自己的 ini 解析器。

【讨论】:

  • @OneTrickPony 好的,那么这是一个错误......更新了我的答案。 (我有 PHP 5.3.15,第一个可以工作的版本 xD)
  • 最终使用了 this 之类的东西。可能更慢,但似乎我别无选择:(
猜你喜欢
  • 2014-10-10
  • 2015-10-13
  • 2016-01-21
  • 1970-01-01
  • 2011-09-18
  • 2019-03-01
  • 2019-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多