Archivos ini en PHP
2007-06-30 12:17:02-05
Programacion
Hace poco estaba haciendo un proyecto y tuve la necesidad de agregar un archivo de inicialización para tener ciertos datos específicos de la configuración del sistema en ese servidor.
Al no tener gran conocimiento de PHP, pensé que el "parsing" del archivo de inicialización lo tendría que hacer "a patín", con un poco de código. Pero me encontré con una función llamada "parse_ini_file()", la cual facilita mucho esta tarea.
(Aquí el post, con código resaltado)
Imaginemos que tenemos este archivo de configuración (prueba.ini):
[conexion]
; Estos datos son para la conexion y este es un comentario.
servidor = localhost
usuario = juanito
[sistema]
estilo = simple
Para obtener la información de cada variable únicamente se hace lo siguiente:
$info = parse_ini_file("prueba.ini");
// La información quedará guardada en un arreglo donde el índice será el nombre de la variable, por lo tanto podemos obtenerlo de la siguiente forma:
// Si queremos imprimir la informacion del servidor sería:
echo $info['servidor'];
// Si queremos imprimir el estilo del sistema
echo $info['estilo'];
?>
Si agregamos un parámetro más a la función, separa por áreas del archivo de inicialización.
$info = parse_ini_file("prueba.ini", true);
// La información quedará guardada en un arreglo multidimensional donde el primer índice será el nombre del "área del archivo ini" y el segundo el nombre de la variable, por lo tanto podemos obtenerlo de la siguiente forma:
echo $info['conexion']['servidor'];
// Si queremos imprimir el estilo del sistema
echo $info['sistema']['estilo'];
?>
Al no tener gran conocimiento de PHP, pensé que el "parsing" del archivo de inicialización lo tendría que hacer "a patín", con un poco de código. Pero me encontré con una función llamada "parse_ini_file()", la cual facilita mucho esta tarea.
(Aquí el post, con código resaltado)
Imaginemos que tenemos este archivo de configuración (prueba.ini):
[conexion]
; Estos datos son para la conexion y este es un comentario.
servidor = localhost
usuario = juanito
[sistema]
estilo = simple
Para obtener la información de cada variable únicamente se hace lo siguiente:
$info = parse_ini_file("prueba.ini");
// La información quedará guardada en un arreglo donde el índice será el nombre de la variable, por lo tanto podemos obtenerlo de la siguiente forma:
// Si queremos imprimir la informacion del servidor sería:
echo $info['servidor'];
// Si queremos imprimir el estilo del sistema
echo $info['estilo'];
?>
Si agregamos un parámetro más a la función, separa por áreas del archivo de inicialización.
$info = parse_ini_file("prueba.ini", true);
// La información quedará guardada en un arreglo multidimensional donde el primer índice será el nombre del "área del archivo ini" y el segundo el nombre de la variable, por lo tanto podemos obtenerlo de la siguiente forma:
echo $info['conexion']['servidor'];
// Si queremos imprimir el estilo del sistema
echo $info['sistema']['estilo'];
?>
Permalink: http://www.mononeurona.org/users/entry/thot/603
Comentblogs:1.-
asarch wrote:
Cuando estaba aprendiendo a usar el API de Microsoft para Windows 3.1 me encontré con un par de funciones que hace exactamente lo mismo, bueno, casi casi ya que tienen un "ligerito" error al querer guardar o leer un valor entero ya que primero tenÃa que convertirse en cadena este valor y de ahà realizar la operación. Las funciones que menciono son las siguientes:
GetProfileString (http://msdn2.microsoft.com/en-us/library/ms724366.aspx)
Más adelante estudiando la librerÃas OWL (Object Windows Library) de Borland me encontré con un tema que, al principio no le puse mucha atención debido a que el ejemplo que mostraban nada más causaba una falla de segmentación de memoria, el cual era la persistencia de objetos.
Cuando finalmente pude leer el libro del inventor del lenguaje C++, Bjarne Stroustrup, El Lenguaje de Programación C++ y finalmente pude comprender lo que esto significaba fue uno de los temas que más me gustó por la libertad que la sobrecarga de los operadores te permitÃa:
std::ofstream out ("file.ini");
if (!out)
{
std::cerr << "No se puede crear file.ini" << std::endl;
exit (1);
}
// 'aplicacion' es el objeto que queremos persistir
aplicacion >> out;
out.close ();
...
// Ahora vamos al reves
std::ifstream in ("file.ini");
// Si el archivo existe leemos los valores de el
if (in)
{
aplicaion << in;
in.close ();
}
Me imagino que PHP por ser un lenguaje completamente orientado a objetos debe de tener la habilidad de persistir objetos tal como se hace en C++.
De todas formas checa este tema ya que personalmente fue uno de los temas que más me gustó de C++
Suerte y ¡¡¡happy hacking!!!
2007-07-01 14:16:56-05
Cuando estaba aprendiendo a usar el API de Microsoft para Windows 3.1 me encontré con un par de funciones que hace exactamente lo mismo, bueno, casi casi ya que tienen un "ligerito" error al querer guardar o leer un valor entero ya que primero tenÃa que convertirse en cadena este valor y de ahà realizar la operación. Las funciones que menciono son las siguientes:
GetProfileString (http://msdn2.microsoft.com/en-us/library/ms724366.aspx)
Más adelante estudiando la librerÃas OWL (Object Windows Library) de Borland me encontré con un tema que, al principio no le puse mucha atención debido a que el ejemplo que mostraban nada más causaba una falla de segmentación de memoria, el cual era la persistencia de objetos.
Cuando finalmente pude leer el libro del inventor del lenguaje C++, Bjarne Stroustrup, El Lenguaje de Programación C++ y finalmente pude comprender lo que esto significaba fue uno de los temas que más me gustó por la libertad que la sobrecarga de los operadores te permitÃa:
std::ofstream out ("file.ini");
if (!out)
{
std::cerr << "No se puede crear file.ini" << std::endl;
exit (1);
}
// 'aplicacion' es el objeto que queremos persistir
aplicacion >> out;
out.close ();
...
// Ahora vamos al reves
std::ifstream in ("file.ini");
// Si el archivo existe leemos los valores de el
if (in)
{
aplicaion << in;
in.close ();
}
Me imagino que PHP por ser un lenguaje completamente orientado a objetos debe de tener la habilidad de persistir objetos tal como se hace en C++.
De todas formas checa este tema ya que personalmente fue uno de los temas que más me gustó de C++
Suerte y ¡¡¡happy hacking!!!
2007-07-01 14:16:56-05
2.-
alucard_thot wrote:
Lo único que estás haciendo es redireccionar el flujo de un objeto a un archivo y viceversa. (Eso lo puedes hacer con cualquier tipo de dato). Si necesitas especificar un formato especifico para la forma en que recibes o sacas del flujo, simplemente sobrecargas los operadores >> o <<.
Un ejemplo sencillito de eso puede ser convertir un archivo a la entrada estándar. (Esto es, que el archivo se convierta en la entrada como si lo recibieras de teclado).
En el caso de el ejemplo que estoy poniendo en PHP, es el parsing (la interpretación de el archivo .ini).
2007-07-01 15:36:50-05
Lo único que estás haciendo es redireccionar el flujo de un objeto a un archivo y viceversa. (Eso lo puedes hacer con cualquier tipo de dato). Si necesitas especificar un formato especifico para la forma en que recibes o sacas del flujo, simplemente sobrecargas los operadores >> o <<.
Un ejemplo sencillito de eso puede ser convertir un archivo a la entrada estándar. (Esto es, que el archivo se convierta en la entrada como si lo recibieras de teclado).
En el caso de el ejemplo que estoy poniendo en PHP, es el parsing (la interpretación de el archivo .ini).
2007-07-01 15:36:50-05










