--TEST--
Test parse_ini_file() function
--FILE--
<?php
/* Prototype: array parse_ini_file(string $filename [,bool $process_sections]);
   Description: parse_ini_file() loads in the ini file specified in filename,
     and returns the settings in it in an associative array. 
*/

$file_path = dirname(__FILE__);

$parse_string = <<<EOD
; Comment starts with semi-colon(;)
; Section starts with [<section name>]

; start of ini file

[Constans]
one = 1
five = 5
animal = BIRD
Language = PHP
PHP_CONSTANT = 1.2345678
10 = Ten
HELLO = HELLO

[date]
date = 
time =

[paths]
path = /usr/local/bin
URL = http://www.php.net

[Decimal]
Decimal_value1 = 100
Decimal_value2 = -100
Decimal_value3 = -2147483647
Decimal_value4 = 2147483647
Decimal_value5 = -2147483648
Decimal_value6 = 2147483648

[Octal]
Octal_value = 0100

[Hex]
Hex_value1 = 0x101
Hex_Value2 = 0x102
Hex_Value2 = 0x103

[Non-alphanumerics_as_values]
;Non-alpha numeric chars without quotes
Non-alpha1 = ;
Non-alpha2 = +
Non-alpha3 = *
Non-alpha4 = %
Non-alpha5 = <>
Non-alpha6 = @
Non-alpha7 = #
Non-alpha8 = ^
non-alpha9 = -
Non-alpha10 = :
Non-alpha11 = ?
Non-alpha12 = /
Non-alpha13 = \
;These chars have a special meaning when used in the value,
;  hence parser throws an error
;Non-alpha14 = & 
;Non-alpha15 = {}
;Non-alpha16 = |
;Non-alpha17 = ~
;Non-alpha18 = !
;Non-alpha19 = $
;Non-alpha20 = () 

Non-alpha1_quotes = ";"
Non-alpha2_quotes = "+"
Non-alpha3_quotes = "*"
Non-alpha4_quotes = "%"
Non-alpha5_quotes = "<>"
Non-alpha6_quotes = "@"
Non-alpha7_quotes = "#"
Non-alpha8_quotes = "^"
Non-alpha9_quotes = "-"
Non-alpha10_quotes = "="
Non-alpha11_quotes = ":"
Non-alpha12_quotes = "?"
Non-alpha13_quotes = "/"
Non-alpha14_quotes = "\"
Non-alpha15_quotes = "&"
Non-alpha16_quotes = "{}"
Non-alpha17_quotes = "|"
Non-alpha18_quotes = "~"
Non-alpha19_quotes = "!"
non-alpha20_quotes = "$"
non-alpha21_quotes = "()"

[Non-alpha numerics in strings]
;expected error, as the non-alphanumeric chars not enclosed in double quotes("")
Non-alpha_string1 = Hello@world
;Non-alpha_string2 = Hello!world
;Non-alpha_string3 = Hello#world
;Non-alpha_string4 = Hello%world
;Non-alpha_string5 = Hello&world
;Non-alpha_string6 = Hello*world
;Non-alpha_string7 = Hello+world
;Non-alpha_string8 = Hello-world
;Non-alpha_string9 = Hello'world
;Non-alpha_string10 = Hello:world
;Non-alpha_string11 = Hello;world
;Non-alpha_string12 = Hello<world
;Non-alpha_string13 = Hello>world
;Non-alpha_string14 = Hello>world
;Non-alpha_string15 = Hello?world
;Non-alpha_string16 = Hello\world
;Non-alpha_string17 = Hello^world
;Non-alpha_string18 = Hello_world
;Non-alpha_string19 = Hello|world
;Non-alpha_string20 = Hello~world
;Non-alpha_string21 = Hello`world
;Non-alpha_string22 = Hello(world)

[Non-alpha numerics in strings -with quotes]
Non-alpha_string1_quotes = "Hello@world"
Non-alpha_string2_quotes = "Hello!world"
Non-alpha_string3_quotes = "Hello#world"
Non-alpha_string4_quotes = "Hello&world"
Non-alpha_string5_quotes = "Hello*world"
Non-alpha_string6_quotes = "Hello+world"
Non-alpha_string7_quotes = "Hello-world"
Non-alpha_string8_quotes = "Hello'world"
Non-alpha_string9_quotes = "Hello:world"
Non-alpha_string10_quotes = "Hello;world"
Non-alpha_string11_quotes = "Hello<world"
Non-alpha_string12_quotes = "Hello>world"
Non-alpha_string13_quotes = "Hello>world"
Non-alpha_string14_quotes = "Hello?world"
Non-alpha_string15_quotes = "Hello\world"
Non-alpha_string16_quotes = "Hello^world"
Non-alpha_string17_quotes = "Hello_world"
Non-alpha_string18_quotes = "Hello|world"
Non-alpha_string19_quotes = "Hello~world"
Non-alpha_string20_quotes = "Hello`world"
Non-alpha_string21_quotes = "Hello(world)"

[Newlines_in_Values]
String1 = "Hello, world\nGood Morning"
String2 = "\nHello, world
             Good Morning\n"
String3 = 'Hello, world\tGood Morning'
String4 = "\n"
String5 = "\n\n"
String3 = Hello, world\tGood Morning

[ReservedKeys_as_Values]
Key1 = YES
Key2 = Yes
Key3 = yEs
Key4 = NO
Key5 = No
Key6 = nO
Key7 = TRUE
Key8 = True
Key9 = tRUE
Key10 = true
Key11 = FALSE
Key12 = False
Key13 = false
Key14 = fAlSE
Key15 = NULL
Key16 = Null
Key17 = nuLL
Key18 = null

[ReservedKeys_as_Keys] 
; Expected:error, reserved key words must not be used as keys for ini file
;YES = 1
;Yes = 2
;yEs = 1.2
;YES = YES
;NO = ""
;No = "string"
;nO = "\0"
;TRUE = 1.1
;True = 1
;tRUE = 5
;true = TRUE
;FALSE = FALSE
;False = ""
;false = "hello"
;fAlSE = ""
;NULL = ""
;Null = 0
;nuLL = "\0"
;null = NULL

; end of ini file
EOD;
/* creating parse.ini file */
$file_handle = fopen($file_path."/parse.ini", "w");
fwrite($file_handle, $parse_string);
fclose($file_handle);

echo "*** Test parse_ini_file() function:  with various keys and values given in parse.ini file ***\n";
echo "-- ini file without process_sections optional arg --\n";
define('BIRD', 'Humming bird');
$ini_array = parse_ini_file($file_path."/parse.ini");
print_r($ini_array);

echo "\n-- ini file with process_sections as TRUE --\n";
$ini_array = parse_ini_file($file_path."/parse.ini", TRUE);
print_r($ini_array);

echo "*** Done **\n";
?>
--CLEAN--
<?php
unlink(dirname(__FILE__)."/parse.ini");
?>
--EXPECTF--
*** Test parse_ini_file() function:  with various keys and values given in parse.ini file ***
-- ini file without process_sections optional arg --
Array
(
    [one] => 1
    [five] => 5
    [animal] => Humming bird
    [Language] => PHP
    [PHP_CONSTANT] => 1.2345678
    [10] => Ten
    [HELLO] => HELLO
    [date] => 
    [time] => 
    [path] => /usr/local/bin
    [URL] => http://www.php.net
    [Decimal_value1] => 100
    [Decimal_value2] => -100
    [Decimal_value3] => -2147483647
    [Decimal_value4] => 2147483647
    [Decimal_value5] => -2147483648
    [Decimal_value6] => 2147483648
    [Octal_value] => 0100
    [Hex_value1] => 0x101
    [Hex_Value2] => 0x103
    [Non-alpha1] => 
    [Non-alpha2] => +
    [Non-alpha3] => *
    [Non-alpha4] => %
    [Non-alpha5] => <>
    [Non-alpha6] => @
    [Non-alpha7] => #
    [Non-alpha8] => ^
    [non-alpha9] => -
    [Non-alpha10] => :
    [Non-alpha11] => ?
    [Non-alpha12] => /
    [Non-alpha13] => \
    [Non-alpha1_quotes] => ;
    [Non-alpha2_quotes] => +
    [Non-alpha3_quotes] => *
    [Non-alpha4_quotes] => %
    [Non-alpha5_quotes] => <>
    [Non-alpha6_quotes] => @
    [Non-alpha7_quotes] => #
    [Non-alpha8_quotes] => ^
    [Non-alpha9_quotes] => -
    [Non-alpha10_quotes] => =
    [Non-alpha11_quotes] => :
    [Non-alpha12_quotes] => ?
    [Non-alpha13_quotes] => /
    [Non-alpha14_quotes] => \
    [Non-alpha15_quotes] => &
    [Non-alpha16_quotes] => {}
    [Non-alpha17_quotes] => |
    [Non-alpha18_quotes] => ~
    [Non-alpha19_quotes] => !
    [non-alpha20_quotes] => $
    [non-alpha21_quotes] => ()
    [Non-alpha_string1] => Hello@world
    [Non-alpha_string1_quotes] => Hello@world
    [Non-alpha_string2_quotes] => Hello!world
    [Non-alpha_string3_quotes] => Hello#world
    [Non-alpha_string4_quotes] => Hello&world
    [Non-alpha_string5_quotes] => Hello*world
    [Non-alpha_string6_quotes] => Hello+world
    [Non-alpha_string7_quotes] => Hello-world
    [Non-alpha_string8_quotes] => Hello'world
    [Non-alpha_string9_quotes] => Hello:world
    [Non-alpha_string10_quotes] => Hello;world
    [Non-alpha_string11_quotes] => Hello<world
    [Non-alpha_string12_quotes] => Hello>world
    [Non-alpha_string13_quotes] => Hello>world
    [Non-alpha_string14_quotes] => Hello?world
    [Non-alpha_string15_quotes] => Hello\world
    [Non-alpha_string16_quotes] => Hello^world
    [Non-alpha_string17_quotes] => Hello_world
    [Non-alpha_string18_quotes] => Hello|world
    [Non-alpha_string19_quotes] => Hello~world
    [Non-alpha_string20_quotes] => Hello`world
    [Non-alpha_string21_quotes] => Hello(world)
    [String1] => Hello, world
Good Morning
    [String2] => 
Hello, world
             Good Morning

    [String3] => Hello, worldGood Morning
    [String4] => 

    [String5] => 


    [Key1] => 1
    [Key2] => 1
    [Key3] => 1
    [Key4] => 
    [Key5] => 
    [Key6] => 
    [Key7] => 1
    [Key8] => 1
    [Key9] => 1
    [Key10] => 1
    [Key11] => 
    [Key12] => 
    [Key13] => 
    [Key14] => 
    [Key15] => 
    [Key16] => 
    [Key17] => 
    [Key18] => 
)

-- ini file with process_sections as TRUE --
Array
(
    [Constans] => Array
        (
            [one] => 1
            [five] => 5
            [animal] => Humming bird
            [Language] => PHP
            [PHP_CONSTANT] => 1.2345678
            [10] => Ten
            [HELLO] => HELLO
        )

    [date] => Array
        (
            [date] => 
            [time] => 
        )

    [paths] => Array
        (
            [path] => /usr/local/bin
            [URL] => http://www.php.net
        )

    [Decimal] => Array
        (
            [Decimal_value1] => 100
            [Decimal_value2] => -100
            [Decimal_value3] => -2147483647
            [Decimal_value4] => 2147483647
            [Decimal_value5] => -2147483648
            [Decimal_value6] => 2147483648
        )

    [Octal] => Array
        (
            [Octal_value] => 0100
        )

    [Hex] => Array
        (
            [Hex_value1] => 0x101
            [Hex_Value2] => 0x103
        )

    [Non-alphanumerics_as_values] => Array
        (
            [Non-alpha1] => 
            [Non-alpha2] => +
            [Non-alpha3] => *
            [Non-alpha4] => %
            [Non-alpha5] => <>
            [Non-alpha6] => @
            [Non-alpha7] => #
            [Non-alpha8] => ^
            [non-alpha9] => -
            [Non-alpha10] => :
            [Non-alpha11] => ?
            [Non-alpha12] => /
            [Non-alpha13] => \
            [Non-alpha1_quotes] => ;
            [Non-alpha2_quotes] => +
            [Non-alpha3_quotes] => *
            [Non-alpha4_quotes] => %
            [Non-alpha5_quotes] => <>
            [Non-alpha6_quotes] => @
            [Non-alpha7_quotes] => #
            [Non-alpha8_quotes] => ^
            [Non-alpha9_quotes] => -
            [Non-alpha10_quotes] => =
            [Non-alpha11_quotes] => :
            [Non-alpha12_quotes] => ?
            [Non-alpha13_quotes] => /
            [Non-alpha14_quotes] => \
            [Non-alpha15_quotes] => &
            [Non-alpha16_quotes] => {}
            [Non-alpha17_quotes] => |
            [Non-alpha18_quotes] => ~
            [Non-alpha19_quotes] => !
            [non-alpha20_quotes] => $
            [non-alpha21_quotes] => ()
        )

    [Non-alpha numerics in strings] => Array
        (
            [Non-alpha_string1] => Hello@world
        )

    [Non-alpha numerics in strings -with quotes] => Array
        (
            [Non-alpha_string1_quotes] => Hello@world
            [Non-alpha_string2_quotes] => Hello!world
            [Non-alpha_string3_quotes] => Hello#world
            [Non-alpha_string4_quotes] => Hello&world
            [Non-alpha_string5_quotes] => Hello*world
            [Non-alpha_string6_quotes] => Hello+world
            [Non-alpha_string7_quotes] => Hello-world
            [Non-alpha_string8_quotes] => Hello'world
            [Non-alpha_string9_quotes] => Hello:world
            [Non-alpha_string10_quotes] => Hello;world
            [Non-alpha_string11_quotes] => Hello<world
            [Non-alpha_string12_quotes] => Hello>world
            [Non-alpha_string13_quotes] => Hello>world
            [Non-alpha_string14_quotes] => Hello?world
            [Non-alpha_string15_quotes] => Hello\world
            [Non-alpha_string16_quotes] => Hello^world
            [Non-alpha_string17_quotes] => Hello_world
            [Non-alpha_string18_quotes] => Hello|world
            [Non-alpha_string19_quotes] => Hello~world
            [Non-alpha_string20_quotes] => Hello`world
            [Non-alpha_string21_quotes] => Hello(world)
        )

    [Newlines_in_Values] => Array
        (
            [String1] => Hello, world
Good Morning
            [String2] => 
Hello, world
             Good Morning

            [String3] => Hello, worldGood Morning
            [String4] => 

            [String5] => 


        )

    [ReservedKeys_as_Values] => Array
        (
            [Key1] => 1
            [Key2] => 1
            [Key3] => 1
            [Key4] => 
            [Key5] => 
            [Key6] => 
            [Key7] => 1
            [Key8] => 1
            [Key9] => 1
            [Key10] => 1
            [Key11] => 
            [Key12] => 
            [Key13] => 
            [Key14] => 
            [Key15] => 
            [Key16] => 
            [Key17] => 
            [Key18] => 
        )

    [ReservedKeys_as_Keys] => Array
        (
        )

)
*** Done **