PHP parse_ini_file TC_CONSTANT警告
我有一个奇怪的问题,很奇怪,因为在谷歌上没有任何东西出现。我试图解析一个充满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行。我已经把线路取出来,没有任何变化。有什么建议么?
正如您所述,问题与204 = No Content
一行。
这是因为No
这是INI文件(以及其他文件)中的特殊值。 INI解析器获取到该行并读取204
密钥的No
值,然后找到生成错误的尾随<space>Content
文本。
PHP手册笔记(例如,用于在parse_ini_file
页):
值
null
,no
和false
导致""
,yes
和true
结果"1"
。
简单的解决将是用双引号值的所有,或者最租赁那些与INI关键字开始,如:
[codes]
100 = "Continue"
101 = "Switching Protocols"
200 = "OK"
201 = "Created"
202 = "Accepted"
啊,优秀。所以INI语法分析器比我想象的更加马虎:) – 2010-10-30 17:56:21
尽管在不同的背景下,这对我也有帮助。在这样的“ini”配置文件中将服务连接信息可以正常工作,但不能在不加引号的情况下包含“no”一词。 – thexfactor 2013-11-13 16:33:56
不幸的是,parse_ini_file()
在它所接受的内容上有点狭隘。
如果在ini文件中的值包含它需要用双引号(“)的任何非字母数字字符。
而且,这可能是该错误信息的原因,我相当肯定你不能用纯数字作为键,以便绝对引用您的值:
[codes]
100 = "Continue"
101 = "Switching Protocols"
200 = "OK"
...
,如有必要,可以在前面你的钥匙:
[codes]
c_100 = "Continue"
c_101 = "Switching Protocols"
c_200 = "OK"
其中一个应该解决这个问题。
当然,它只是简单。谢谢!我追着TC_CONSTANT而不是用引号来玩。我不需要在密钥前加上字母,但引用肯定会有很长的路要走。 – noazark 2010-10-30 17:52:21
8号线可能引用代码中的行,而不是ini文件。 – 2010-10-30 17:41:15
@Pekka,不,它是INI文件,并且方便地指向有“No”值的地方。 – salathe 2010-10-30 17:53:58