Проблема с парсингом в parse_ini_file() в 4.3.6

Foshvad

Guest
Проблема с парсингом в parse_ini_file() в 4.3.6

Кто сталкивался с подобным:

Linux 2.4.21-9.0.3.ELsmp
Server API CGI
PHP Version 4.3.6


INI файл:
[01]
a= a1

[02]
b= b1

[03]
c= c1

[04]
d= d1

[05]
e= e1

[06]
f= f1

[07]
g= g1

[08]
k= k1

[09]
l= l1

[10]
m= m1

[11]
n= n1
результат работы parse_ini_file($file,true):

PHP:
Array
(
    [1] => Array
        (
        )

    [2] => Array
        (
        )

    [3] => Array
        (
        )

    [4] => Array
        (
        )

    [5] => Array
        (
        )

    [6] => Array
        (
        )

    [7] => Array
        (
        )

    [0] => Array
        (
        )

    [10] => Array
        (
        )

    [11] => Array
        (
        )

)

Пропущены 8-я и 9-я секция

Файл многократно переписывался и создавался заново в поисках скрытых символов – большая просьба – у кого работает PHP как CGI – попробовать запустить это дело и запостить результат
 

tony2001

TeaM PHPClub
код:
PHP:
var_dump(parse_ini_file('test.ini'));
результат:
Код:
array(11) {
  ["a"]=>
  string(2) "a1"
  ["b"]=>
  string(2) "b1"
  ["c"]=>
  string(2) "c1"
  ["d"]=>
  string(2) "d1"
  ["e"]=>
  string(2) "e1"
  ["f"]=>
  string(2) "f1"
  ["g"]=>
  string(2) "g1"
  ["k"]=>
  string(2) "k1"
  ["l"]=>
  string(2) "l1"
  ["m"]=>
  string(2) "m1"
  ["n"]=>
  string(2) "n1"
}
PHP 4.3.7-dev (Apache, CLI)
PHP 5.0.0RC2-dev (Apache, CLI)

т.е. повторить не могу.
уверен на 100%, что с CGI будет то же самое.
 

Foshvad

Guest
tony2001
В parse_ini_file второй параметр должден быть true

Есть у кого-нить идеи из-за чего это можеть быть?
 

tony2001

TeaM PHPClub
>В parse_ini_file второй параметр должден быть true
в следующий раз давай готовый test case.

>Есть у кого-нить идеи из-за чего это можеть быть?
есть.
в Zend Engine используется strtol() для приведения строки к числу.
вот, что говорит мануал по strtol:
strtol(const char *nptr, char **endptr, int base);
Если base равно нулю или 16-и, то строка может начинаться с приставки `0x', что означает использование шестнадцатеричной системы исчисления; иначе, если base равно нулю, используется десятичная система исчисления, кроме случая, когда последующий символ также равен `0': тогда используется восьмеричная система исчисления.
см. тут функцию zend_atoi();

-~{}~ 27.04.04 13:55:

самый простой выход из ситуации: не называть секции "0...".
в этом случае, все будет нормально.
 

Foshvad

Guest
Спасибо пребольшое за подробный ответ.
 
Сверху