Ask a Question related to PHP Notes, Design and Development.
-
Airmax Es #1
note 33814 added to function.parse-ini-file
/**
* 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
* 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, es un
* apartado que no se ha tenido en cuenta en el código.
*/
function editar_ini ($fichero_ini, $clave, $nuevo_valor) {
// Abrimos el fichero de sólo lectura
$contenido_ini = "";
$fp = fopen($fichero_ini, "r");
while(!feof($fp)) $contenido_ini.= fread($fp,1024);
fclose($fp);
//Buscamos a ver si encontramos la clave (buscamos la palabra exacta y a principio de linea)
$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");
// Si devuelve un false (3 IGUALES para diferenciar el ZERO (de posición) al 0 de FALSE)
// es que no ha encontrado la palabra por lo tanto ya no continuamos buscando
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 ($pos_espacios < $pos_igual) $pos_fin_clave = $pos_espacios; // Los espacios están antes del IGUAL por lo tanto molestan
else $pos_fin_clave = $pos_igual; // Los espacios están dspues del IGUAL por lo tanto 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;
} //else $Clave_Encontrada = false;
} //else $Clave_Encontrada = false;
} while ( ($pos_clave !== false) && ($Clave_Encontrada == false) );
if ($Clave_Encontrada == true) {
$nuevo_contenido = substr ($contenido_ini, 0, $pos_fin_clave);
//Ahora añadimos manualmente el IGUAL (para así despreciar espacios innecesarios) y el nuevo valor
$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, 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 -- [url]http://www.php.net/manual/en/function.parse-ini-file.php[/url]
Edit Note -- [url]http://master.php.net/manage/user-notes.php?action=edit+33814[/url]
Delete Note -- [url]http://master.php.net/manage/user-notes.php?action=delete+33814&report=yes[/url]
Reject Note -- [url]http://master.php.net/manage/user-notes.php?action=reject+33814&report=yes[/url]
Airmax Es Guest
-
note 33942 added to function.is-file
For those interested on Win2k Server/IIS5/PHP 4.3.2 both is_dir() and is_file() reported incorrectly when cycling through a directory. Is dir... -
note 33843 added to function.file
This function does exactly what this should do: $file = fopen("myfile.txt", "r"); $content = fread($file, filesize("myfile.txt")); $content =... -
note 33815 deleted from function.parse-ini-file by didou
Note Submitter: airmax_es@yahoo.es ---- /** * void function editar_ini ($fichero_ini, $clave, $nuevo_valor); * * Proposito: - Cambiar... -
note 33741 added to function.parse-str
You can perform the opposite of this function if you like with a function like I've built below: /** * Reverse of parse_str(). Converts array... -
note 33588 added to function.file
this is very good to all as concerned. ---- Manual Page -- http://www.php.net/manual/en/function.file.php Edit Note --... -
didou@php.net #2
note 33814 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
* 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, es un
* apartado que no se ha tenido en cuenta en el código.
*/
function editar_ini ($fichero_ini, $clave, $nuevo_valor) {
// Abrimos el fichero de sólo lectura
$contenido_ini = "";
$fp = fopen($fichero_ini, "r");
while(!feof($fp)) $contenido_ini.= fread($fp,1024);
fclose($fp);
//Buscamos a ver si encontramos la clave (buscamos la palabra exacta y a principio de linea)
$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");
// Si devuelve un false (3 IGUALES para diferenciar el ZERO (de posición) al 0 de FALSE)
// es que no ha encontrado la palabra por lo tanto ya no continuamos buscando
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 ($pos_espacios < $pos_igual) $pos_fin_clave = $pos_espacios; // Los espacios están antes del IGUAL por lo tanto molestan
else $pos_fin_clave = $pos_igual; // Los espacios están dspues del IGUAL por lo tanto 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;
} //else $Clave_Encontrada = false;
} //else $Clave_Encontrada = false;
} while ( ($pos_clave !== false) && ($Clave_Encontrada == false) );
if ($Clave_Encontrada == true) {
$nuevo_contenido = substr ($contenido_ini, 0, $pos_fin_clave);
//Ahora añadimos manualmente el IGUAL (para así despreciar espacios innecesarios) y el nuevo valor
$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, 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



Reply With Quote

