Je ne peux pas trouver un moyen qui me permette facilement de créer un nouveau fichier, de le traiter comme un fichier ini (pas php.ini ou simiilar ... un fichier ini séparé pour par utilisateur), et de créer/supprimer des valeurs en utilisant PHP. PHP ne semble pas offrir un moyen facile de créer un fichier ini et de lire/écrire/supprimer des valeurs. Pour l'instant, tout est simplement "lu" - rien sur la création d'entrées ou la manipulation de clés/valeurs.
Extrait de code suivant 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;
}
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!
PEAR a deux packages (testés à l'unité) qui font la tâche que vous attendez:
.ini
des dossiers.php
et .xml
des dossiersJe préfère utiliser un code bien testé que d'écrire le mien.
Je ne peux pas garantir à quel point cela fonctionne, mais il y a quelques suggestions pour implémenter l'opposé de parse_ini_file()
(c'est-à-dire write_ini_file
, qui n'est pas un standard PHP) sur la page de documentation de parse_ini_file
.
Vous pouvez utiliser write_ini_file
pour envoyer les valeurs dans un fichier, parse_ini_file
pour les relire - modifiez le tableau associatif que parse_ini_file
renvoie, puis réécrivez le tableau modifié dans le fichier avec write_ini_file
.
Est-ce que ça marche pour toi?
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 sinon vous trouverez des clés vides dans votre .ini
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é 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 ça et ça semble marcher
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