我有一个奇怪的问题,很奇怪,因为谷歌没有出现任何问题。我正在尝试解析一个充满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行。我已经把这条线拿走了,没有任何改变。有什么建议吗?
答案 0 :(得分:9)
正如您所指出的,问题在于行204 = No Content
。
这是因为No
是INI文件中的特殊值(以及其他文件)。 INI解析器到达此行并读取No
键的204
值,然后查找生成错误的尾随<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"
答案 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"
其中一个应该解决问题。