créer un fichier ini, écrire des valeurs en PHP
Je ne peux pas trouver un moyen qui me permette facilement de créer un nouveau fichier, le traiter comme un fichier ini (pas php.ini ou simiilar... un fichier ini séparé pour chaque utilisateur), et créer/supprimer des valeurs en utilisant PHP. PHP semble offrir aucun moyen facile de créer un fichier ini et de lire/écrire/supprimer des valeurs. Jusqu'à présent, tout n'est que "lire" - rien à propos de la création d'entrées ou de la manipulation de clés/valeurs.
6 réponses
extrait de code trouvé dans les commentaires de la documentation 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;
}
Utilisation:
$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);
Bonne chance!
PEAR a deux paquets (testés à l'unité) qui font la tâche que vous attendez:
- Config_Lite - idéal si vous ne voulez
.ini
fichiers - Config - lit aussi
.php
et.xml
fichiers
je préfère utiliser du code bien testé que d'écrire le mien.
Je ne peux pas me porter garant de la façon dont cela fonctionne, mais il y a quelques suggestions pour mettre en œuvre le contraire de parse_ini_file()
(i.e. write_ini_file
, qui n'est pas une fonction PHP standard) sur la page de documentation pour parse_ini_file
.
Vous pouvez utiliser write_ini_file
pour envoyer les valeurs d'un fichier, parse_ini_file
à lire dans - de modifier le tableau associatif parse_ini_file
retourne, puis renvoie le tableau modifié au fichier avec write_ini_file
.
cela fonctionne pour vous?
dans cette partie du code:
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 doit être remplacé par $key ou vous trouverez vide clés dans votre .ini
basé sur les réponses ci-dessus, j'ai écrit cette classe qui pourrait être utile. Pour PHP 5.3 mais peut être facilement adapté pour les versions précédentes.
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";
}
}
}
}
je l'utiliser et il semble fonctionner
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";
}
}
}
il renvoie le texte à écrire dans un .fichier ini