Foros del Web » Programando para Internet » PHP »

Array global

Estas en el tema de Array global en el foro de PHP en Foros del Web. Hola, quiero tener una variable array global a todo mi sitio web. Se me ocurren dos opciones: A: Definir en MIS_GLOBALES.php un "static global $MI_ARRAY ...
  #1 (permalink)  
Antiguo 13/01/2005, 04:26
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 19 años, 5 meses
Puntos: 9
Array global

Hola, quiero tener una variable array global a todo mi sitio web. Se me ocurren dos opciones:

A: Definir en MIS_GLOBALES.php un "static global $MI_ARRAY = array(1,2,3);"
En cada script que deba usar el array, hacer include(MIS_GLOBALES.php);

B: Definirla en el primer script que utilice el array. "$MI_ARRAY = array(1,2,3);"
En cada script que utilice el array hacer $GLOBALS[$MI_ARRAY[1]]

¿Cual es la correcta? ¿Se puede declarar un "static global" o solo con "global" es suficiente? ¿La declaración global, es global al script (dentro y fuera de funciones) o global a todo el servidor/sitio web?

Gracias.

Última edición por PosProdukcion; 13/01/2005 a las 04:27
  #2 (permalink)  
Antiguo 13/01/2005, 04:39
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Variable significa que varia con el tiempo, asi que el include no te sirve.

GLOBAL es a nivel de unidad de ejecucion, es decir, script en un tiempo. Dos usuarios accediendo al mismo script no comparten GLOBAL, y menos 2 scripts ejecutados separadamente.

En PHP la cosa funciona asi:

Realizas la peticion, se carga y ejecuta el script, y desaparece todo recuerdo del script.

Si quieres tener una variable global a una sesion de un usuario, usa sesiones. Si quieres que la variable sea compartida entre sesiones y usuarios, tendras que grabarla en almacenamiento permanente, como en un fichero en disco duro, o en un base de datos, y acceder a ese almacenamiento.

saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 13/01/2005, 05:03
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 19 años, 5 meses
Puntos: 9
Me dices:

Cita:
Si quieres tener una variable global a una sesion de un usuario, usa sesiones. Si quieres que la variable sea compartida entre sesiones y usuarios.
Perdon, pero ¿un usuario no es equivalente a una sesion?

La cosa es que tengo en el servidor un numero N de ficheros (independiente de sesion, de usuario, etc. N cambia de vez en cuando, p.ej, semanalmente). Ese valor N necesito conocerlo en 2 o mas scripts diferentes. Podria leer de disco cada vez y saber N, pero por ahorrar tiempo en accesos queria almacenar N en memoria. Imagino que podria hacerlo en $_SESSION. Entonces, ¿es asi?:

Digamos que en script A, digo $N = 3;
//tengo register_globals a OFF, o sea, creo que no debo hacer session_register() o similar

EN el script B ¿basta con hacer if ($_SESSION[$N] == 3) ....?

¿O mejor me dejo de historias y hago varios accesos a disco?

Gracias.
  #4 (permalink)  
Antiguo 13/01/2005, 09:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El terminio sería "cliente" -> 1 sesión .. más que hablar de "usuarios" que son própios de tu sistema/aplicación. Cliente es el "PC" (IP) que accede a tu script.

Las sesiones en si crean archivos en el servidor . .así que igualmente hay un acceso al "disco" de todas formas.

Lo que no me quedó claro es que si ese variable $N="valor" es una constante que no tocas ni varia y la tienes en un variables.php ... o es un dato que varie o sea factible que varie o tenga que ser definido para la "sesión" en curso?..

Si es ese caso .. usa un include ("variables.php") y llamas a tu $N cuando lo necesites en el código ...

Ahora .. si ese dato por ejemplo sale de una consulta a tu BD .. como suele ser típico .. para ahorrar consultas a tu BD .. genera una variable en tu sesión y usala por la "vida" de tu sesión.

Un saludo,
  #5 (permalink)  
Antiguo 13/01/2005, 13:15
Avatar de PosProdukcion  
Fecha de Ingreso: noviembre-2004
Ubicación: Manzanares el Real (Madrid)
Mensajes: 726
Antigüedad: 19 años, 5 meses
Puntos: 9
Vale, resumiendo: $N es el numero de ficheros que hay dentro de un directorio. Ademas quiero mas informacion de estos ficheros, que almaceno en un array $MATRIZ: P.ej: Nombre de cada uno, contenido de la primera linea, etc. Esta informacion cambia, por ejemplo, cada semana, o sea, que dentro de una sesion e incluso para diferentes usuarios $N y $MATRIZ no va a cambiar.

Entonces, en el scriptA leo los ficheros de disco y doy valor a $N y $MATRIZ, que almaceno en ¿¿¿¿DONDE??? y en el scriptB podria (sin ningun problema) volver a leer los ficheros y volver a calcular $N y $MATRIZ, pero si en vez de hacer un nuevo acceso a disco, puedo obtener el valor de ¿¿¿DONDE??? pues mucho mejor.

Despues de vuestras respuestas creo entender que ese ¿¿¿DONDE??? es $_SESSION.

Y perdon por insistir pero despues de leer todo acerca del ambito de las variables y todo este enlace http://www.php.net/manual/es/ref.session.php,
pues aun no me queda claro si ES SUFICIENTE con hacer, p.ej:

scriptA:
$N = 3;
$MATRIZ[1][1] = "fich1";
etc etc

¿En scriptB reconocera asi por las buenas esas variables a traves de sesion?:

if ($_SESSION[$N] == 3) {...}
echo $_SESSION[$MATRIZ[1][1]];

Bueno, al final no he resumido nada y he puesto un pedazo post enorme, pido disculpas y espero que se haya aclarado la cosa.

Muchas gracias.
  #6 (permalink)  
Antiguo 14/01/2005, 14:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Mira .. $_SESSION debes entenderlo como un array más .. sólo con el "detallito" de que queda en el servidor en un archivo que se genera bajo un nombre único (SID) que puedes leer desde cualquier otro script que lo necesite que esté bajo esa sesión activa ..

Para eso, debes "registrar" tu variable (de cualquier tipo .. incluso arrays y hasta objetos) en tu "variable de sesión"

A.php
Código PHP:
<?
// Inicio de sesión .. si no lo haces no podrás acceder al contenido de $_SESSION
session_start();

// Tus variables de cualquier tipo...
$MATRIZ[1][1]="blabla";
$N="10";

// Y el "registro" en tus variables de sesión.
$_SESSION['matriz']=$MATRIZ;
$_SESSION['n']=$N;


// pasas a B.php por un link .. o redireccionando .. 
?>
B.php
Código PHP:
<?
session_start
();
$MATRIZ=$_SESSION['matriz'];
$N=$_SESSION['n'];

// Y trabajas con tus variables de la forma habitual
echo $MATRIZ[1][1];
echo 
$N;
?>
En las FAQ's de este foro tienes más ejemplo y algo más "digerible" explicado que es esto de las "sesiones".

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:04.