Pregunta

¿PHP tiene variables globales que pueden ser modificadas por un script en ejecución y leídas por otro?

¿Fue útil?

Solución

No, por diseño PHP es un & "; no comparta nada &"; arquitectura, lo que significa que no se comparte nada entre procesos que se ejecutan al mismo tiempo o entre solicitudes que se ejecutan una tras otra. Hay formas de compartir datos, pero debe hacerlo explícitamente.

Si solo desea compartir entre 2 solicitudes del mismo usuario, las sesiones o las cookies pueden ser el camino a seguir.

Si desea compartir entre múltiples usuarios, probablemente desee algún tipo de persistencia compartida, ya sea a corto plazo en un caché (por ejemplo, memcached) o más robusto como una base de datos.

De cualquier manera, los datos se están recuperando y reconstruyendo en cada solicitud. Simplemente se maneja automáticamente en el caso de las sesiones.

Otros consejos

Puede usar $ _SESSION , es decir:

script1.php

<?php
session_start();
$_SESSION['myVar'] = "something";
?>

script2.php

<?php
session_start();
echo $_SESSION['myVar'];
//something
?>

Realmente puede hacer esto usando memoria compartida , o APC (que está utilizando la memoria compartida).

El único al que se puede acceder entre scripts es la matriz superglobal $ _SESSION. Esto se debe a que cualquier cosa que almacene en la matriz se envía a una cookie, que luego puede ser recogida por el siguiente script PHP.

Las variables globales simplemente significan que se puede acceder a ellas en el script independientemente del alcance; eso no significa que puedan enviarse entre scripts.

Entonces, o bien tiene que transferir las variables usando la matriz $ _SESSION (esto almacena una cookie en la computadora del cliente, así que no envíe ninguna información confidencial a través de esa matriz) o puede POST o GET entre las secuencias de comandos para enviar las variables.

Cada solicitud es manejada por una instancia de php propia. Las variables globales en php solo son accesibles desde la misma instancia de php. Sin embargo, puede usar algo como el módulo memchached para compartir datos entre diferentes instancias (que generalmente deberían ser más rápidas que escribir los datos en el sistema de archivos).

No como tal, pero puede usar cookies o sesiones para mantener los datos durante la experiencia de navegación de un usuario, o puede escribir en una base de datos o archivo en el disco si la información necesita persistir más allá de eso.

Otra sustitución común para las variables globales en PHP es el uso compartido de una base de datos como MySQL (aunque no es perfecta)

Las variables globales son malas en la mayoría de la programación. Son especialmente malos en sistemas multiproceso / multiusuario como webapps. Evitar. Si debe utilizar variables globales (en lugar de constantes globales) colóquelas en una base de datos con transacciones que protejan las actualizaciones.

Sin embargo, dado que habla de diferentes scripts, parece que lo que realmente desea es un marco de aplicaciones web en un lenguaje más orientado a las aplicaciones, algo como Django (python) o Rails (ruby). Estos le permiten pensar en su código mucho más como un PROGRAMA cohesivo, en lugar de una gran cantidad de scripts conectados libremente que procesan solicitudes web.

Hice una pequeña biblioteca (~ 2 KB; < 100 líneas) que le permite hacer exactamente esto: varDx

Tiene funciones para escribir, leer, modificar, verificar y eliminar datos. Implementa la serialización y, por lo tanto, admite todos los tipos de datos.

Así es como puedes usarlo:

<?php
require 'varDx.php';
$dx = new \varDx\cDX; //create an object
$dx->def('file.dat'); //define data file

$val1 = "this is a string";
$dx->write('data1', $val1); //writes key to file
echo $dx->read('data1'); //returns key value from file
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top