2012-11-30 8 views
8

Ho fatto un lungo scritto in PHP come tale:corsa lungo sfondo PHP blocchi di script PHP altre pagine fino a quando non è finito

ignore_user_abort(true); 
set_time_limit(0); 

Funziona perfettamente in background anche se chiudo la pagina. Il mio problema è che non riesco ad aprire altri file PHP finché questo script non termina l'esecuzione in background. Come posso risolvere questo problema?

+1

fa questo script più t le pagine che vengono bloccate utilizzano le sessioni? –

+0

Fino a quando lo script lungo è in esecuzione, o fino a quando non è finito in esecuzione? – cegfault

+0

@SalmanA Sì, i miei file utilizzano sessioni, è questo il problema? – martincpt

risposta

17

Quando uno script PHP utilizza sessioni, PHP blocca il file di sessione fino al completamento dello script. Una richiesta di pagina che tenta di utilizzare una sessione bloccata viene bloccata fino al rilascio del file di sessione. PHP lo fa in modo che le sessioni rimangano in uno stato coerente. Quote from PHP bug #31464:

[2005-01-10 08:13 GMT] derick in php Dot Net

Questo è davvero non è un bug a tutti, l'estensione della sessione ha bisogno per bloccare il file di sessione in modo che concomitante gli aggiornamenti non possono corrompere il file. Ciò significa che tutti gli script che utilizzano lo stesso file di sessione devono essere serializzati . Per migliorare le prestazioni, è possibile utilizzare http://php.net/session_write_close non appena si è finito di leggere le variabili di sessione , che rimuoverà il blocco del file .

La soluzione più semplice, come descritto sopra e here as well è:

  • chiamata session_start()
  • di lettura/scrittura tutte le variabili di sessione
  • chiamata session_write_close()
  • fare lunghe elaborazione
4

Come menzionato nei commenti, le sessioni rappresentano il problema, poiché il file di sessione è bloccato.

Utilizzare session_write_close() nello script di esecuzione prolungata per sbloccare il file di sessione, ma tenere presente che non è possibile utilizzare le variabili $_SESSION in quello specifico script in seguito.

+0

Grazie per la risposta Kolink, mi sono offerto di accettare la risposta di SalmanA se voleva scriverne una perché era il primo. Altri casi accetterò la tua risposta. – martincpt

Problemi correlati