create ini file, write values in PHP
I cannot find a way that easily lets me create a new file, treat it as an ini file (not php.ini or simiilar... a separate ini file for per user), and create/delete values using PHP. PHP seems to offer no easy way to create an ini file and read/write/delete values. So far, it's all just "read" - nothing about creating entries or manipulating keys/values.
Solution 1:
Found following code snippet from the comments of the PHP documentation:
function write_ini_file($assoc_arr, $path, $has_sections=FALSE) {
$content = "";
if ($has_sections) {
foreach ($assoc_arr as $key=>$elem) {
$content .= "[".$key."]\n";
foreach ($elem as $key2=>$elem2) {
if(is_array($elem2))
{
for($i=0;$i<count($elem2);$i++)
{
$content .= $key2."[] = \"".$elem2[$i]."\"\n";
}
}
else if($elem2=="") $content .= $key2." = \n";
else $content .= $key2." = \"".$elem2."\"\n";
}
}
}
else {
foreach ($assoc_arr as $key=>$elem) {
if(is_array($elem))
{
for($i=0;$i<count($elem);$i++)
{
$content .= $key."[] = \"".$elem[$i]."\"\n";
}
}
else if($elem=="") $content .= $key." = \n";
else $content .= $key." = \"".$elem."\"\n";
}
}
if (!$handle = fopen($path, 'w')) {
return false;
}
$success = fwrite($handle, $content);
fclose($handle);
return $success;
}
Usage:
$sampleData = array(
'first' => array(
'first-1' => 1,
'first-2' => 2,
'first-3' => 3,
'first-4' => 4,
'first-5' => 5,
),
'second' => array(
'second-1' => 1,
'second-2' => 2,
'second-3' => 3,
'second-4' => 4,
'second-5' => 5,
));
write_ini_file($sampleData, './data.ini', true);
Good luck!
Solution 2:
PEAR has two (unit tested) packages which do the task you are longing for:
-
Config_Lite - ideal if you only want
.ini
files -
Config - reads also
.php
and.xml
files
I'd rather use well tested code than writing my own.
Solution 3:
I can't vouch for how well it works, but there's some suggestions for implementing the opposite of parse_ini_file()
(i.e. write_ini_file
, which isn't a standard PHP function) on the documentation page for parse_ini_file
.
You can use write_ini_file
to send the values to a file, parse_ini_file
to read them back in - modify the associative array that parse_ini_file
returns, and then write the modified array back to the file with write_ini_file
.
Does that work for you?