PHP parse_ini_file TC_CONSTANT警告

时间:2010-10-30 17:30:30

标签: php warnings ini

我有一个奇怪的问题,很奇怪,因为谷歌没有出现任何问题。我正在尝试解析一个充满HTTP状态代码的ini文件,StatusCodes.ini。我在三个不同的环境中进行了测试,在共享主机(Hostmonster.com)上本地(WAMP),现在在运行CentOS w / CPanel / WHM的专用机器上进行测试。前两个环境似乎工作正常,但在专用机器上我收到警告:

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 = No Content,是第8行。我已经把这条线拿走了,没有任何改变。有什么建议吗?

2 个答案:

答案 0 :(得分:9)

正如您所指出的,问题在于行204 = No Content

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

PHP手册说明(例如,在parse_ini_file的页面上):

  

nullnofalse会导致""yestrue生成"1"

简单的解决方法是用双引号括起所有值,或者以INI关键字开头的那些,如:

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

答案 1 :(得分:2)

不幸的是,parse_ini_file()接受的内容有点狭窄。

  

如果ini文件中的值包含任何非字母数字字符,则需要用双引号(“)括起来。

此外,这可能是错误消息的原因,我很确定你不能使用纯数字作为键。所以一定要引用你的价值观:

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

并在必要时为您的密钥添加前缀:

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

其中一个应该解决问题。