создать ini-файл, записать значения в PHP

Я не могу найти способ, который легко позволяет мне создать новый файл, рассматривать его как ini-файл (а не php.ini или simiilar … отдельный ini-файл для каждого пользователя) и создавать / удалять значения с помощью PHP. PHP, кажется, не предлагает простой способ создания ini-файла и чтения / записи / удаления значений. Пока все это просто «прочитано» – ничего о создании записей или манипулировании ключами / значениями.

Найден следующий фрагмент кода из комментариев документации PHP:

 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; } 

Применение:

 $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); 

Удачи!

PEAR имеет два (единичных) пакета, которые выполняют задачу, к которой вы так стремились:

  • Config_Lite – идеально, если вы хотите только файлы .ini
  • Config – читает также .php и .xml файлы

Я бы предпочел использовать хорошо протестированный код, чем писать свои собственные.

Я не могу ручаться за то, насколько хорошо он работает, но есть предложения по реализации противоположного parse_ini_file() (т.е. write_ini_file , который не является стандартной функцией PHP) на странице документации для parse_ini_file .

Вы можете использовать write_ini_file для отправки значений в файл parse_ini_file для их write_ini_file чтения – изменить ассоциативный массив, который возвращает parse_ini_file , а затем записать измененный массив обратно в файл с write_ini_file файла write_ini_file .

Это работает для вас?

в этой части кода:

 else { foreach ($assoc_arr as $key=>$elem) { if(is_array($elem)) { for($i=0;$i<count($elem);$i++) { $content .= $key2."[] = \"".$elem[$i]."\"\n"; } } else if($elem=="") $content .= $key2." = \n"; else $content .= $key2." = \"".$elem."\"\n"; } } 

$ key2 должен быть заменен на $ key или вы найдете пустые ключи в вашем .ini

основанный на вышеупомянутых ответах, я написал этот класс, который может быть полезен. Для PHP 5.3, но может быть легко адаптирован для предыдущих версий.

 class Utils { public static function write_ini_file($assoc_arr, $path, $has_sections) { $content = ''; if (!$handle = fopen($path, 'w')) return FALSE; self::_write_ini_file_r($content, $assoc_arr, $has_sections); if (!fwrite($handle, $content)) return FALSE; fclose($handle); return TRUE; } private static function _write_ini_file_r(&$content, $assoc_arr, $has_sections) { foreach ($assoc_arr as $key => $val) { if (is_array($val)) { if($has_sections) { $content .= "[$key]\n"; self::_write_ini_file_r(&$content, $val, false); } else { foreach($val as $iKey => $iVal) { if (is_int($iKey)) $content .= $key ."[] = $iVal\n"; else $content .= $key ."[$iKey] = $iVal\n"; } } } else { $content .= "$key = $val\n"; } } } } 

Я использую это и, похоже, работает

 function listINIRecursive($array_name, $indent = 0) { global $str; foreach ($array_name as $k => $v) { if (is_array($v)) { for ($i=0; $i < $indent * 5; $i++){ $str.= " "; } $str.= " [$k] \r\n"; listINIRecursive($v, $indent + 1); } else { for ($i=0; $i < $indent * 5; $i++){ $str.= " "; } $str.= "$k = $v \r\n"; } } } 

он возвращает текст для записи в файл .ini