PHP解析INI文件错误

3

我将使用parse_ini_file函数来读取文件内容,但是有时候会失败。

例如,下面的文件可以正常工作:

[playlist]
numberofentries=3
File1=http://scfire-dtc-aa05.stream.aol.com:80/stream/1010
Title1=(#1 - 168/11500) Absolutely Smooth Jazz - SKY.FM - the world's smoothest jazz 24 hours a day
Length1=-1
File2=http://scfire-ntc-aa06.stream.aol.com:80/stream/1010
Title2=(#2 - 171/11500) Absolutely Smooth Jazz - SKY.FM - the world's smoothest jazz 24 hours a day
Length1=-1
File3=http://scfire-mtc-aa04.stream.aol.com:80/stream/1010
Title3=(#3 - 175/11500) Absolutely Smooth Jazz - SKY.FM - the world's smoothest jazz 24 hours a day
Length1=-1
Version=2

然而,当我使用parse_ini_file来读取以下文件时,我收到一个错误,指出它无法解析该文件:
[playlist]
numberofentries=3
File1=http://87.230.82.17:80
Title1=(#1 - 365/1400) DEFJAY.DE - 100% R&B! (GERMANY)
Length1=-1
File2=http://87.230.56.25:80
Title2=(#2 - 370/1400) DEFJAY.DE - 100% R&B! (GERMANY)
Length1=-1
File3=http://87.230.56.32:80
Title3=(#3 - 375/1400) DEFJAY.DE - 100% R&B! (GERMANY)
Length1=-1
Version=2

这是读取文件的代码:

以下是我的代码:

$file = "test.pls";
$ini_array = parse_ini_file($file, true);
$audiostream = $ini_array['playlist']['File1'];
echo "stream is: ".$audiostream;

我看不出这些文件之间有什么明显的区别。有人知道是哪里出了问题吗?

谢谢。


我只是猜测,但我怀疑您实际上收到了一个正确的错误消息,其中包含了出错的描述和位置,而您已经随意决定在问题中不公开。 - lanzz
1个回答

5

首先,您需要用双引号(")将非字母数字字符括起来。

根据手册:

如果 INI 文件中的某个值包含任何非字母数字字符,则需要用双引号(")将其括起来。

PHP.net - parse_ini_file

因此:

[playlist]
 numberofentries=3
 File1="http://87.230.82.17:80"
 Title1="(#1 - 365/1400) DEFJAY.DE - 100% R&B! (GERMANY)"
 Length1=-1
 File2="http://87.230.56.25:80"
 Title2="(#2 - 370/1400) DEFJAY.DE - 100% R&B! (GERMANY)"
 Length1=-1
 File3="http://87.230.56.32:80"
 Title3="(#3 - 375/1400) DEFJAY.DE - 100% R&B! (GERMANY)"
 Length1=-1
 Version=2 

此外请注意,有保留字:
必须不使用作为ini文件键的保留字。它们包括:null、yes、no、true、false、on、off、none。值null、no和false导致“”,yes和true导致“1”。字符?{}|&~![()^”不能在键中使用,并且在值中具有特殊含义。

你好,感谢您的回复。这对我来说是一个问题,因为文件来自外部来源。是否有可能保存文件,将所有内容添加引号,然后再尝试解析它? - RyanDreggs
当然可以,您可以保存更改的字符串,然后使用http://www.php.net/manual/en/function.parse-ini-string.php。 - Aurimas Ličkus
回答得非常漂亮! - Juan Herrera

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接