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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top