2010-10-30 46 views
2

我有一个奇怪的问题,很奇怪,因为在谷歌上没有任何东西出现。我试图解析一个充满HTTP状态码StatusCodes.ini的ini文件。我测试了三种不同的环境,本地(WAMP)在共享主机(Hostmonster.com)上,现在在运行CentOS w/CPanel/WHM的专用机器上进行测试。前两种环境看起来做工精细,但在专用机器上我得到一个警告:PHP parse_ini_file TC_CONSTANT警告

Warning: syntax error, unexpected TC_CONSTANT in StatusCodes.ini on line 8

运行时:

$ini = parse_ini_file('StatusCodes.ini',true); 
$codes = $ini['codes']; 

ini文件看起来像:

 
[codes] 
100 = Continue 
101 = Switching Protocols 
200 = OK 
201 = Created 
202 = Accepted 
203 = Non-Authoritative Information 
204 = No Content 
205 = Reset Content 
206 = Partial Content 
300 = Multiple Choices 
301 = Moved Permanently 
302 = Found 
303 = See Other 
304 = Not Modified 
305 = Use Proxy 
307 = Temporary Redirect 
400 = Bad Request 
... 

如果你不想计数,204 =没有内容,是第8行。我已经把线路取出来,没有任何变化。有什么建议么?

+0

8号线可能引用代码中的行,而不是ini文件。 – 2010-10-30 17:41:15

+0

@Pekka,不,它是INI文件,并且方便地指向有“No”值的地方。 – salathe 2010-10-30 17:53:58

回答

8

正如您所述,问题与204 = No Content一行。

这是因为No这是INI文件(以及其他文件)中的特殊值。 INI解析器获取到该行并读取204密钥的No值,然后找到生成错误的尾随<space>Content文本。

PHP手册笔记(例如,用于在parse_ini_file页):

nullnofalse导致""yestrue结果"1"

简单的解决将是用双引号值的所有,或者最租赁那些与INI关键字开始,如:

[codes] 
100 = "Continue" 
101 = "Switching Protocols" 
200 = "OK" 
201 = "Created" 
202 = "Accepted" 
+0

啊,优秀。所以INI语法分析器比我想象的更加马虎:) – 2010-10-30 17:56:21

+0

尽管在不同的背景下,这对我也有帮助。在这样的“ini”配置文件中将服务连接信息可以正常工作,但不能在不加引号的情况下包含“no”一词。 – thexfactor 2013-11-13 16:33:56

1

不幸的是,parse_ini_file()在它所接受的内容上有点狭隘。

如果在ini文件中的值包含它需要用双引号(“)的任何非字母数字字符。

而且,这可能是该错误信息的原因,我相当肯定你不能用纯数字作为键,以便绝对引用您的值:

[codes] 
100 = "Continue" 
101 = "Switching Protocols" 
200 = "OK" 
... 

,如有必要,可以在前面你的钥匙:

[codes] 
c_100 = "Continue" 
c_101 = "Switching Protocols" 
c_200 = "OK" 

其中一个应该解决这个问题。

+0

当然,它只是简单。谢谢!我追着TC_CONSTANT而不是用引号来玩。我不需要在密钥前加上字母,但引用肯定会有很长的路要走。 – noazark 2010-10-30 17:52:21