Ask a Question related to PHP Notes, Design and Development.
-
didou@php.net #1
note 33815 deleted from function.parse-ini-file by didou
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);
}
}
didou@php.net Guest
-
note 33361 deleted from function.ob-start by didou
Note Submitter: digerati@n0spam.bellsouth.net ---- In respone to the comment by: daevid at daevid dot com about using include() with the... -
note 19929 deleted from function.is-a by didou
Note Submitter: php@electricsurfer.com ---- Here is a 3 line PHP implementation that worked for me: if (!function_exists('is_a')) {... -
note 21357 deleted from function.is-a by didou
Note Submitter: krisher@oswego.edu ---- Any implementation of is_a that relies on empty() to test whether the object parameter is empty will... -
note 19730 deleted from function.is-a by didou
Note Submitter: ernest@vogelsinger.at ---- For the previous example you need to exchange the function parameters to be compliant to the CVS... -
note 19727 deleted from function.is-a by didou
Note Submitter: dan at mojavelinux dot com ---- php implementation to keep us happy for now if (!function_exists('is_a')) { function...



Reply With Quote

