Variabili statiche PHP su più pagine .php
-
03-07-2019 - |
Domanda
Sto costruendo una cassetta postale POP3 in PHP. Ho i seguenti file :
- server_access.php (recupera i messaggi dal server POP3)
- data_access.php (che recupera / scrive mail nel DB locale)
- mime_parser.php (analizza i contenuti MIME)
- core.php (usa i file sopra e archivia la posta analizzata come un array assoc chiamato $ inbox)
Ora ho le pagine mailbox.php per mostrare la posta in arrivo e showmail.php per visualizzare ogni mail. Le credenziali dell'utente sono archiviate in un file .ini e utilizzate se necessario. Il fatto è che faccio un request_once ('core.php') sia in mailbox.php che in showmail.php
Sono in grado di visualizzare la posta in arrivo (es. $ inbox ha dei valori), tuttavia, se scelgo di leggere una mail (finestra pop-up di showmail.php), $ inbox è un array vuoto.
$ inbox è definito come un array statico in core.php
Soluzione
I dati statici sono statici solo nel contesto di una classe, il che significa che un membro di dati statici in una classe è condiviso da tutte le istanze di quella classe.
Ciò di cui sembra parlare è la persistenza dei dati su più richieste HTTP. I dati statici non lo faranno per te. Ecco a cosa servono i dati $ _SESSION.
Per dirla in altro modo: una volta che uno script termina di servire la richiesta corrente, muore completamente. Tutti i dati sono stati completamente ripuliti. La nuova richiesta inizia di nuovo.
I dati di sessione persistono fino a quando PHP non decide di ripulirli o di distruggerli manualmente. In genere tutto ciò che devi fare per utilizzare i dati della sessione è inserito nello script:
Script 1: mailbox.php
session_start();
I dati statici sono statici solo nel contesto di una classe, il che significa che un membro di dati statici in una classe è condiviso da tutte le istanze di quella classe.
Ciò di cui sembra parlare è la persistenza dei dati su più richieste HTTP. I dati statici non lo faranno per te. Ecco a cosa servono i dati $ _SESSION.
Per dirla in altro modo: una volta che uno script termina di servire la richiesta corrente, muore completamente. Tutti i dati sono stati completamente ripuliti. La nuova richiesta inizia di nuovo.
I dati di sessione persistono fino a quando PHP non decide di ripulirli o di distruggerli manualmente. In genere tutto ciò che devi fare per utilizzare i dati della sessione è inserito nello script:
Script 1: mailbox.php
session_start();
$mailbox = I dati statici sono statici solo nel contesto di una classe, il che significa che un membro di dati statici in una classe è condiviso da tutte le istanze di quella classe.
Ciò di cui sembra parlare è la persistenza dei dati su più richieste HTTP. I dati statici non lo faranno per te. Ecco a cosa servono i dati $ _SESSION.
Per dirla in altro modo: una volta che uno script termina di servire la richiesta corrente, muore completamente. Tutti i dati sono stati completamente ripuliti. La nuova richiesta inizia di nuovo.
I dati di sessione persistono fino a quando PHP non decide di ripulirli o di distruggerli manualmente. In genere tutto ciò che devi fare per utilizzare i dati della sessione è inserito nello script:
Script 1: mailbox.php
session_start();
I dati statici sono statici solo nel contesto di una classe, il che significa che un membro di dati statici in una classe è condiviso da tutte le istanze di quella classe.
Ciò di cui sembra parlare è la persistenza dei dati su più richieste HTTP. I dati statici non lo faranno per te. Ecco a cosa servono i dati $ _SESSION.
Per dirla in altro modo: una volta che uno script termina di servire la richiesta corrente, muore completamente. Tutti i dati sono stati completamente ripuliti. La nuova richiesta inizia di nuovo.
I dati di sessione persistono fino a quando PHP non decide di ripulirli o di distruggerli manualmente. In genere tutto ciò che devi fare per utilizzare i dati della sessione è inserito nello script:
Script 1: mailbox.php
<*>
Script 2: showmail.php
<*>
Una cosa da notare: se lo script è di lunga durata, prova a inserire una session_commit () il prima possibile perché l'accesso alla sessione si blocca in PHP, il che significa che se un altro script tenta di session_start () per lo stesso utente, bloccherà fino a quando il primo script non termina l'esecuzione o rilascia la sessione.
SESSION['mailbox'] = array( /* messages */ );
Script 2: showmail.php
<*>
Una cosa da notare: se lo script è di lunga durata, prova a inserire una session_commit () il prima possibile perché l'accesso alla sessione si blocca in PHP, il che significa che se un altro script tenta di session_start () per lo stesso utente, bloccherà fino a quando il primo script non termina l'esecuzione o rilascia la sessione.
SESSION['mailbox'];
Script 2: showmail.php
<*>
Una cosa da notare: se lo script è di lunga durata, prova a inserire una session_commit () il prima possibile perché l'accesso alla sessione si blocca in PHP, il che significa che se un altro script tenta di session_start () per lo stesso utente, bloccherà fino a quando il primo script non termina l'esecuzione o rilascia la sessione.
SESSION['mailbox'] = array( /* messages */ );
Script 2: showmail.php
<*>Una cosa da notare: se lo script è di lunga durata, prova a inserire una session_commit () il prima possibile perché l'accesso alla sessione si blocca in PHP, il che significa che se un altro script tenta di session_start () per lo stesso utente, bloccherà fino a quando il primo script non termina l'esecuzione o rilascia la sessione.
Altri suggerimenti
php Session ha bisogno di un posto dove archiviare i dati di sessione tra le richieste. Nel tuo caso è una cartella temp \ php \ session \ nella tua home directory. Crea quella cartella o modifica session.save_path in php.ini per puntare a una directory valida.
Se il tuo file core
fornisce i dati giusti a mailbox.php, ma non showmail.php è correlato a qualcosa che stai (o non stai facendo) in showmail.php.