2010-11-03 14 views
9

C'è un modo per archiviare piccoli dati nella memoria RAM usando PHP in modo che io possa avere accesso ai dati tra diverse sessioni invece di rigenerarle. Qualcosa di simile a memcached (non ho accesso a memcahced). La mia soluzione attuale è solo per salvare i dati nel file.Come posso archiviare i dati nella memoria RAM usando PHP?

+0

possibile duplicato di [PHP: variabili lato server che saranno "live" per sempre?] (Http://stackoverflow.com/questions/4086044/php-server-side-variables-that-will-live-for- mai) - ci sono molte risposte che sono applicabili alla tua domanda. – Gordon

+0

Perché? Su qualsiasi sistema operativo moderno (in cui la memoria non è su un filesystem condiviso) i dati del file vengono comunque memorizzati nella memoria. – symcbean

+0

Modificato la mia risposta. – Strae

risposta

4

Suppongo che tu sia su un server condiviso di qualche tipo.

memcached o un'altra soluzione di memorizzazione nella cache è davvero l'unico modo per farlo.

Sessioni, il metodo più importante per mantenere i dati su pagine PHP, lavorare in base ai file. È possibile modificare il gestore di sessione in base al database, ma non quello basato su RAM.

Per quanto posso vedere, senza modificare il sistema a livello di root (ad esempio per installare memcached o memorizzare i file di sessione su un disco RAM), questo non è possibile.

5

È possibile utilizzare sempre un DB in memoria per salvare i dati. Forse eccessivo, però.

+1

Sono sorpreso che nessun altro abbia dato una risposta. Ho avuto successo usando le tabelle di memoria mysql e sono molto veloci.RDB potrebbe essere eccessivo per le sessioni, ma è un'ottima opzione quando non si ha accesso a memcached o/dev/ –

12

APC?

Funziona diversamente da memcached; in memcached puoi accedere ai dati da vari linguaggi (c, python, ecc.) mentre APC funziona solo per PHP.

EDIT sei sicuro che APC sia installato correttamente? Hai aggiunto extension=apc.so nel tuo php.ini? E per riavviare Apache (im assumendo sei su un lamp server con apache2)? Cosa dice phpinfo(); di APC?

Si tratta di una semplice testare che funzionano perfettamente per me:

<?php 
/* 
* page.php 
* Store the variable for 30 seconds, 
* see http://it.php.net/manual/en/function.apc-add.php 
* */ 
if(apc_add('foo', 'bar', 30)){ 
    header('Location: page2.php'); 
}else{ 
    die("Cant add foo to apc!"); 
} 

<?php 
/* 
* page2.php 
* */ 
echo 'foo is been set as: ' . apc_fetch('foo'); 

ps: io preferisco usare apc_add sopra apc_store, ma l'unica differenza tra loro è che pretende molto apc_add sovrascrivere la variabile, ma non riesce se chiamata due volte con la stessa chiave:

Memorizzare la variabile usando questo nome. le chiavi sono cache-unique, quindi il tentativo di utilizzare apc_add() per archiviare i dati con una chiave già esistente non sovrascriverà i dati esistenti e restituirà invece FALSE. (Questa è l'unica differenza tra apc_add() e apc_store().)

E 'una questione di gusto/compito dello script, ma l'esempio precedente funziona con apc_store troppo.

+0

Non è possibile installare memcached, quindi è probabile che non possa installare APC –

+0

Vero, ma molti hoster permettono l'uso di APC (con alcune limitazioni) - dobbiamo chiederglielo. – Strae

3

Creare un file in /dev/shm e verrà mantenuto in memoria fino al riavvio della macchina. Questo può essere o non essere più veloce dell'utilizzo di qualsiasi vecchio file, a seconda del modello di utilizzo.

+0

Sembra essere su un server condiviso –

+2

@Pekka Bene, allora è fottuto ... Speriamo solo che il suo file venga memorizzato nella cache dal sistema operativo. – kijin

Problemi correlati