Bug #53916 [Opn->Nab]: parse_ini_file unable to handle strings with certain characters
| From: | pierrick@php.net | Date: | Thu, 07 Jun 2012 13:09:51 +0000 |
| Subject: | Bug #53916 [Opn->Nab]: parse_ini_file unable to handle strings with certain characters | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-171107@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=53916&edit=1
ID: 53916
Updated by: pierrick@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] zefredz@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] aharvey@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