2

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

警告:语法错误,第 8 行的 StatusCodes.ini 中出现意外的 TC_CONSTANT

运行时:

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

ini 文件如下所示:

[代码]
100 = 继续
101 = 切换协议
200 = 好的
201 = 已创建
202 = 接受
203 = 非权威信息
204 = 无内容
205 = 重置内容
206 = 部分内容
300 = 多项选择
301 = 永久移动
302 = 找到
303 = 见其他
304 = 未修改
305 = 使用代理
307 = 临时重定向
400 = 错误请求
...

如果您不想计算,则 204 = No Content 是第 8 行。我已将行取出,没有任何变化。有什么建议么?

4

2 回答 2

9

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

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

PHP 手册注释(​​例如在页面上parse_ini_file):

null,结果,结果。no_ _false""yestrue"1"

简单的解决方法是将所有值括在双引号中,或者至少将那些以 INI 关键字开头的值括起来,例如:

[codes]
100 = "Continue"
101 = "Switching Protocols"
200 = "OK"
201 = "Created"
202 = "Accepted"
于 2010-10-30T17:51:52.517 回答
3

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

如果 ini 文件中的值包含任何非字母数字字符,则需要将其括在双引号 (") 中。

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

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

如有必要,为您的密钥添加前缀:

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

其中之一应该可以解决问题。

于 2010-10-30T17:40:19.890 回答