Domanda

PHP ha variabili globali che possono essere modificate da uno script in esecuzione e letti da un altro?

È stato utile?

Soluzione

No, per impostazione predefinita PHP è un " condividi nulla " architettura, il che significa che nulla è condiviso tra processi in esecuzione contemporaneamente o tra richieste in esecuzione una dopo l'altra. Esistono modi per condividere i dati, ma devi farlo esplicitamente.

Se desideri solo condividere tra 2 richieste dello stesso utente, sessioni o cookie potrebbero essere la strada da percorrere.

Se si desidera condividere tra più utenti, probabilmente si desidera una sorta di persistenza condivisa, a breve termine in una cache (ad esempio memcached) o più robusta come un database.

Ad ogni modo, i dati vengono effettivamente recuperati e ricostruiti su ogni richiesta. Viene gestito automaticamente per te in caso di sessioni.

Altri suggerimenti

Puoi utilizzare $ _SESSION , ovvero:

script1.php

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

script2.php

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

Puoi effettivamente farlo utilizzando memoria condivisa o APC (che utilizza la memoria condivisa stessa).

L'unico a cui è possibile accedere tra gli script è l'array superglobal $ _SESSION. Questo perché tutto ciò che memorizzi nell'array viene inviato a un cookie, che può quindi essere raccolto dal prossimo script PHP.

Le variabili globali indicano semplicemente che è possibile accedervi nello script indipendentemente dall'ambito; ciò non significa che possano essere inviati tra script.

Quindi o devi trasferire le variabili usando l'array $ _SESSION (questo memorizza un cookie sul computer client, quindi non inviare alcuna informazione sensibile attraverso quell'array) oppure puoi inviare POST o GET tra gli script da inviare le variabili.

Ogni richiesta è gestita da una sua istanza php. Le variabili globali in php sono accessibili solo dalla stessa istanza di php. Tuttavia, puoi utilizzare qualcosa come il modulo memchached per condividere dati tra istanze diverse (che di solito dovrebbero essere più veloci di scrivere i dati nel filesystem).

Non in quanto tale, ma è possibile utilizzare i cookie o le sessioni per conservare i dati per la durata dell'esperienza di navigazione di un utente, oppure è possibile scrivere su un database o un file su disco se le informazioni devono persistere oltre.

Un'altra sostituzione comune per le variabili globali in PHP è l'uso condiviso di un database come MySQL (anche se non perfetto)

Le variabili globali sono cattive nella maggior parte della programmazione. Sono particolarmente dannosi nei sistemi multithread / multiutente come le webapp. Evitare. Se devi utilizzare le variabili globali (anziché le costanti globali) inseriscile in un database con le transazioni a protezione degli aggiornamenti.

Dato che parli di diversi script, sembra che quello che vuoi davvero sia un framework di applicazioni web in un linguaggio più orientato all'applicazione, qualcosa come Django (python) o Rails (ruby). Questi ti consentono di pensare al tuo codice molto più come un PROGRAMMA coerente, piuttosto che molti script vagamente connessi che elaborano le richieste web.

Ho creato una piccola libreria (~ 2 KB; < 100 righe) che ti permette di fare proprio questo: varDx

Ha funzioni per scrivere, leggere, modificare, controllare ed eliminare i dati. Implementa la serializzazione e quindi supporta tutti i tipi di dati.

Ecco come puoi 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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top