note 33815 added to function.parse-ini-file

From: Date: Tue, 08 Jul 2003 15:43:12 +0000
Subject: note 33815 added to function.parse-ini-file
Groups: php.notes 
Request: Send a blank email to php-notes+get-51709@lists.php.net to get a copy of this message
/** * 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); } } ---- Manual Page -- http://www.php.net/manual/en/function.parse-ini-file.php Edit Note -- http://master.php.net/manage/user-notes.php?action=edit+33815 Delete Note -- http://master.php.net/manage/user-notes.php?action=delete+33815&report=yes Reject Note -- http://master.php.net/manage/user-notes.php?action=reject+33815&report=yes

« previous php.notes (#51709) next »