有没有parse_ini_file()的特殊行为我应该知道吗?

时间:2018-02-16 12:07:59

标签: php arrays ini

我有一个非常大的INI文件(大约100kb和超过2000行)我试图用PHP解析:$ini_array = parse_ini_file("config.ini");

但该函数会发出警告:PHP Warning: syntax error, unexpected '(' in config.ini on line 1334 in ...

查看第1334行不会显示任何语法错误。然后我读了这个answer

  

简短回答:

     

不要相信行号,在错误中提到的行之前的行中查找语法错误。

我确信文件中没有错误,因为它在其他工具的生产中用于在Pascal中编写。

所以,

  • 如何手动检查文件是否有错误?

  • 如果文件中没有语法错误,我应该注意parse_ini_file()的行为吗?

2 个答案:

答案 0 :(得分:1)

你可以试试"手册" approch,二分法搜索。

  1. 删除第1333行后的行。
  2. 然后删除(大)块之前的行,直到没有错误。
  3. 按较小的块添加行,直到再次出现错误为止。
  4. 你会发现错误。

答案 1 :(得分:0)

我在PHP手册中找到了:

  

字符?{} |&〜![()^"不得在密钥中的任何位置使用,并且在值中具有特殊含义。

PHP 5.3.0我们可以设置第三个参数scanner_mode。所以 使用parse_ini_file()作为第三个参数调用INI_SCANNER_RAW可以解决问题 - 该函数不会评估值。

默认情况下,该函数使用INI_SCANNER_NORMAL模式并评估值。