Note Submitter: [email]airmax_es@yahoo.es[/email]

----

/**
* void function editar_ini ($fichero_ini, $clave, $nuevo_valor);
*
* Proposito: - Cambiar el valor de claves guardadas en el fichero INI
* especificado.
* - Si la clave especificada no existe la función la añade.
*
* Uso: editar_ini ("/home/prueba/privat/fichero.ini", "NivelAcceso", "4");
*
* Antes (fichero.ini):
* NivelAcceso = 2
*
* Después (fichero.ini):
* NivelAcceso = "4" //Las comillas se añaden para que la función
* //parse_ini_file pueda leer todo tipo de simbolos
* //como por ejemplo: '~' (alt + 126)
*
* Exigencias: Todas las claves han de finalizar con un '\n' para que la función
* parse_ini_file funcione correctamente; La función editar_ini ya
* añade el '\n' al final de cada clave --> NivelAcceso = "4"\n
*
* Autor: Antonio Hervás (airmax_es@yahoo.es)
*
* ToDo: No tiene en cuenta las secciones de los ficheros INI.
*/

function editar_ini ($fichero_ini, $clave, $nuevo_valor) {
$contenido_ini = "";
$fp = fopen($fichero_ini, "r");
while(!feof($fp)) $contenido_ini.= fread($fp,1024);
fclose($fp);
$i = 0;
$pos_clave = $pos_fin_clave = $pos_igual = 0;
$Clave_Encontrada = false;
do {
$cmp_clave = "";
do {
$pos_clave = strpos ($contenido_ini, $clave, $i);
$i = $pos_clave + 1;
$chr_anterior = substr($contenido_ini, $pos_clave-1, 1);
} while ($pos_clave !== false && $pos_clave!=0 && $chr_anterior!="\n");

if (!($pos_clave === false)) {
// Si se ha encontrado la palabra a principio de linea miramos que no sea un prefijo
// por ejemplo { PortA, PortB, Port } y estemos buscando Port nos detectaría la primera
// coincidencia (PortA) mientras que nosotros queremos que nos devuelva Port

//Si se encuentra, buscamos hasta el IGUAL para obtener la clave
$pos_igual = strpos ($contenido_ini, "=", $pos_clave+1);
$pos_espacios = strpos ($contenido_ini, " ", $pos_clave+1);
if ($pos_igual !== false) {
// Se ha encontrado el IGUAL por lo tanto podemos averiguar la clave
if ($pos_espacios !== false) {
// Se han encontrado espacios que pueden estar antes o dspues del IGUAL
// IF Los espacios están antes del IGUAL molestan
if ($pos_espacios < $pos_igual) $pos_fin_clave = $pos_espacios;
else $pos_fin_clave = $pos_igual; // Los espacios están dspues del IGUAL no molestan
} else $pos_fin_clave = $pos_igual; //No se han encontrado espacios
$cmp_clave = substr ($contenido_ini, $pos_clave, $pos_fin_clave - $pos_clave);
$Clave_Encontrada = (strcmp ($clave, $cmp_clave)==0)?true:false;
}
}
} while ( ($pos_clave !== false) && ($Clave_Encontrada == false) );

if ($Clave_Encontrada == true) {
$nuevo_contenido = substr ($contenido_ini, 0, $pos_fin_clave);
$nuevo_contenido.=" = \"".trim($nuevo_valor)."\"\n";
//A partir del Igual hasta el final de linea es la clave vieja
$pos_fin_linea = strpos ($contenido_ini, "\n", $pos_fin_clave);
if ($pos_fin_linea !== false) $nuevo_contenido.= substr ($contenido_ini, $pos_fin_linea+1);
//Else EOF, fin de fichero por lo tanto no hay que añadir nada más
$fp = fopen($fichero_ini, "w");
fwrite($fp, $nuevo_contenido);
fclose($fp);
} else { // No existia la clave por lo tanto la agregamos
$nuevo_contenido = $clave." = \"".trim($nuevo_valor)."\"\n";
$fp = fopen($fichero_ini, "a");
fwrite($fp, $nuevo_contenido);
fclose($fp);
}
}