Edit report at https://bugs.php.net/bug.php?id=53916&edit=1

 ID:                 53916
 Updated by:         pierr...@php.net
 Reported by:        thasypher at gmail dot com
 Summary:            parse_ini_file unable to handle strings with certain
                     characters
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            Filesystem function related
 Operating System:   Debian 5
 PHP Version:        Irrelevant
-Assigned To:        
+Assigned To:        pierrick
 Block user comment: N
 Private report:     N

 New Comment:

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

By default the parse_ini_file function will use INI_SCANNER_NORMAL as the 3rd 
parameter. This mode will parse the option (like it is doing for php.ini) and 
will 
"compute" the values. That's why if you have something like this :

[test_normal]
test_or_op = 1|2
test_bool = On

The test_or_op will be 3 and test_bool will 1. You have a problem with your 
code 
because in this mode & ! are operators.

If you want to avoid those values to be parsed, you can use the other mode 
INI_SCANNER_RAW. This mode will parse the same ini as you could expect :

test_or_op=1|2 and test_bool=On


Previous Comments:
------------------------------------------------------------------------
[2012-06-07 12:36:03] thasypher at gmail dot com

I know, but these ini's are generated by some other system that does not 
properly quote the values. 

As far as I know there is no requirement for ini's to have values quoted 
either, so it would be nice if parse_ini_file would properly handle that.

------------------------------------------------------------------------
[2012-06-07 08:22:42] zefr...@php.net

I don't know if it will help to find the cause of this bug, but I found that 
enclosing the string with quotes solves the problem :

ini file:
---------
[test]
some_thing = "R3iDn3!rj3j"

test file:
----------
<?php
print_r(parse_ini_file('bug.ini', true ));

result (as expected):
----------------------
Array ( [test] => Array ( [some_thing] => R3iDn3!rj3j ) )

------------------------------------------------------------------------
[2011-02-04 13:50:04] thasypher at gmail dot com

A sample INI could be:

----
[data]
test_case = 1
some_server = localhost
more_stuff = 8.8.8.8

[test]
somevalue = 1
password_server.domain.tld = h1b{k&Tx$jt2

----

In this case, it throws an "Error parsing <filename> on line 8.

Also with:
---
[test]
some_thing = R3iDn3!rj3j
---

it will fail.

So ISTM that special characters are causing issues in the parse_ini_file.

------------------------------------------------------------------------
[2011-02-04 10:46:39] ahar...@php.net

What version of PHP are you running? This seems to behave as expected
in PHP 5.3.5.

Could you also provide a (short) sample file.ini, please?

------------------------------------------------------------------------
[2011-02-03 09:00:14] thasypher at gmail dot com

Obviously the test script should not contain a comma next to the true value.

------------------------------------------------------------------------


The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at

    https://bugs.php.net/bug.php?id=53916


-- 
Edit this bug report at https://bugs.php.net/bug.php?id=53916&edit=1

Reply via email to