44 votes

créer un fichier ini, écrire des valeurs en PHP

Je ne trouve pas de moyen qui me permette de créer facilement un nouveau fichier, de le traiter comme un fichier ini (pas de php.ini ou similaire ... un fichier ini séparé pour chaque utilisateur), et de créer / supprimer des valeurs à l'aide de PHP. PHP ne semble pas offrir de moyen facile de créer un fichier ini et de lire / écrire / supprimer des valeurs. Jusqu'à présent, tout est simplement "lu" - rien sur la création d'entrées ou la manipulation de clés / valeurs.

54voto

Harri Siirak Points 716

Extrait de code suivant, extrait 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; 
}
 

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

Bonne chance!

7voto

Dominic Rodger Points 44489

Je ne peux pas se porter garant de la façon dont cela fonctionne bien, mais il ya quelques suggestions pour la mise en œuvre de la face de l' parse_ini_file() (c - write_ini_file, ce qui n'est pas une norme en fonction PHP) 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 pour les lire dans - de modifier le tableau associatif parse_ini_file revient, puis écrire le tableau modifié dans le fichier avec write_ini_file.

Cela fonctionne pour vous?

7voto

cweiske Points 13722

PEAR a deux paquets (testés par unité) qui font la tâche à laquelle vous aspirez:

  • Config_Lite - idéal si vous ne voulez que des fichiers .ini
  • Config - lit également les fichiers .php et .xml

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

5voto

mario-mesiti Points 71

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

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

3voto

Tivie Points 4581

Sur la base des réponses ci-dessus, j'ai écrit ce cours qui pourrait être utile. Pour PHP 5.3 mais peut être facilement adapté aux 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";
                }
            }
        }
    }
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X