Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 943
netrox Avatar asked Aug 12 '09 19:08

netrox


People also ask

How do I write data into an ini file?

Line 1: Load the file into an array. Line 2: set the value. Next lines: Compile ini file content. Last line: write content to disk.


3 Answers

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!

like image 156
Harri Siirak Avatar answered Sep 20 '22 02:09

Harri Siirak


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.

like image 25
cweiske Avatar answered Sep 21 '22 02:09

cweiske


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?

like image 27
Dominic Rodger Avatar answered Sep 21 '22 02:09

Dominic Rodger