Question

Je ne peux pas trouver un moyen qui me permet de créer facilement un nouveau fichier, le traiter comme un fichier ini (non 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 lecture / écriture / suppression des valeurs. Jusqu'à présent, il est tout simplement « lire » -. Rien sur la création d'entrées ou de manipuler les clés / valeurs

Était-ce utile?

La solution

Trouvée suivant extrait de code des 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!

Autres conseils

PEAR a deux (unité testée) les paquets qui font la tâche que vous aspirez:

  • Config_Lite - idéal si vous voulez que les fichiers .ini
  • Config - et aussi .php lectures fichiers .xml

Je préfère utiliser le code bien testé que d'écrire mon propre.

Je ne peux pas se porter garant de la façon dont il fonctionne, mais il y a quelques suggestions pour la mise en œuvre à l'opposé de parse_ini_file() (c.-à-write_ini_file, ce qui est une fonction standard de PHP) sur la page de documentation pour parse_ini_file.

Vous pouvez utiliser write_ini_file pour envoyer les valeurs dans un fichier, parse_ini_file les relue - modifier le tableau associatif qui parse_ini_file les retours, puis écrire le tableau modifié dans le fichier avec write_ini_file

.

Est-ce que le travail pour vous?

dans cette partie de 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"; 
    } 
} 

$ cle2 doit être remplacé par clé $ ou vous trouveriez clés vides dans votre .ini

sur la base des 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";
                }
            }
        }
    }

J'utilise cela 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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top