note 33814 added to function.parse-ini-file

Ask a Question related to PHP Notes, Design and Development.

  1. #1

    Default 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

  2. Similar Questions and Discussions

    1. 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...
    2. 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 =...
    3. 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...
    4. 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...
    5. 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 --...
  3. #2

    Default 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

Posting Permissions

  • You may not post new threads
  • You may post replies
  • You may not post attachments
  • You may not edit your posts

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139