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.
Réponses
Trop de publicités?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!
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?
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.
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
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";
}
}
}
}