Back to top

Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - utentedisperato

Pagine: [1]
1
Allora, premettendo che utilizzo Sourcerer, il sistema è come segue. Ti anticipo che il codice è frammentato perchè l'ho reso molto modulare.

Un modulo Joomla chiede il require di script1.php: in esso non è inizializzata alcuna sessione perchè, essendo poi incorporato nel modulo, la sessione è già attiva.
Al click del pulsante è associata una chiamata ajax a script2.php, esterno a Joomla, il quale si occupa di effettuare lo switch del valore, attendendone l'esito: al termine di script2 (e, quindi, quando "VAR" è switchata) viene riletto il <div> di script1 che contiene il pulsante (per caricare il nuovo stato di VAR).
Script2.php contiene il codice di avvio di sessione come segue:

<?php
// Starting session
define( '_JEXEC', 1 );
define( 'JPATH_BASE', '../../' );
define( 'DS', DIRECTORY_SEPARATOR );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe = JFactory::getApplication('site');
$mainframe -> initialise();

$session =& JFactory::getSession();
$database_system = $session -> get('database_system');
....

dove, all'interno di $database_system, un array, ho VAR che, dopo la sua modifica, setto così:

$session -> set('database_system', $database_system);

Questo flusso si porta a compimento perchè, quando viene riletto il div di script1, effettivamente lo stato di VAR è cambiato.
Sempre all'interno di script2, dopo la modifica di VAR, c'è un controllo: se VAR = 1 lancia un exec:

exec('wget -q UrlDelFileFileB.php > /dev/null 2>&1 &');

Questo funziona (l'ho testato), lanciando lo script in background che contiene il ciclo while (nei precedenti post era appunto fileB).
Quindi anche fileB è esterno a joomla, per questo, inizializzo la sessione così come ho fatto pet script2, usando la stessa sintassi, e caricando il valore di VAR così:

$session =& JFactory::getSession();
$database_system = $session -> get('database_system');

il suo valore è la condizione del ciclo while. Subito dopo aver inizializzato il ciclo, chiedo nuovamente di caricare VAR, come appena mostrato, in modo che ad ogni inizio ciclo si sfrutti il suo valore aggiornato. Ma qui c'è il cuore del problema e il valore non si aggiorna. Anche se, parallelamente, sto lì a giocare con script1 e script2, cambiando il valore di VAR diverse volte.

Ora non so se il while è un codice chiuso...io comunque richiedo il valore di VAR direttamente dalla sessione Joomla.......STO IMPAZZENDO!!!
 :D



2
Allora, i miei script in php sono nella cartella "scripts", contenuta nella directory principale del mio sito Joomla!.


Ho provato a seguire il tuo consiglio, ma non so se l'ho applicato correttamente: ho inserito
echo error_log(var_export($_SESSION, true));
mi visualizza sempre 1...non so cosa significhi...sicuramente non ho capito come usare la funzione.


Cmq avevo fatto a modo mio dei monitor sullo stato della variabile e ti riporto un risultato dei vari test ripetuti. Per capirci chiamo "fileA" quello che contiene il pulsante che fa lo switch di stato e "fileB" lo script che effettua il loop, la variabile che cambia stato la chiamo VAR.


1) Lancio la pagina che legge il fileA. VAR = 0.
2) Clicco sul pulsante => Si aggiorna la pagina e VAR = 1.
3) Lancio separatamente il fileB (nel test lo faccio manualmente e, dato che non funziona, ho impostato un numero di cicli pari a 4 per non renderlo infinito).
4) Mentre il ciclo si esegue, prima che si concluda il 4° ciclo, torno sulla pagina del fileA e clicco sul pulsante => la pagina si riaggiorna e VAR = 0.
5) fileB conclude i suoi cicli e nel browser viene visualizzato:

VAR: 1
N. di ciclo: 0

VAR: 1
N. di ciclo: 1

VAR: 1
N. di ciclo: 2

VAR: 1
N. di ciclo: 3

...praticamente non si osserva il cambio di stato di VAR da 1 a 0.
Per di più, se riclicco il pulsante (ricordiamoci che VAR era diventata 0) VAR non diventa 1 ma 0, e solo se clicco ancora diventa 1: questo significa che, al termine del ciclo, VAR ha ripreso il valore che possedeva all'interno di fileB (mi immagino che rilasciando le risorse, VAR si sia sovrascritta).
Spero di essere stato chiaro nella descrizione!

3
Mmm sai non penso: al momento,  per il testing, ho impostato uno sleep di 2 secondi prima di chiudere il ciclo... C'è qualcos'altro che "mura" le variabili..

4
Ciao a tutti,


in una pagina ho un pulsate che, al click, mi cambia il valore di una variabile di sessione booleana: da 0 a 1 o viceversa. Quando il valore diventa 1 viene richiamato uno script in php che lavora in background e che sfrutta la sessione di joomla.
Questo script ha un ciclo while che resta attivo finchè la variabile booleana è 1 mentre, quando essa diventa 0, lo script esce dal ciclo e lo script termina la sua esecuzione.


Questa è la teoria.


In pratica, riesco a lanciare lo script, riesco a condividere la variabile di sessione ma sembra che, una volta avviato lo script, lo stato di tale variabile resti "congelato". Il loop diventa un ciclo infinito che non riesco più ad interrompere.


Facendo diverse prove ed uscendo dall'ambiente di Joomla, mi sembra che non faccio errori concettuali di php (almeno credo), quindi, non mi resta che pensare che c'è qualcosa che non so su Joomla, per quanto riguarda la gestione delle variabili di sessione.


Io vorrei poter cambiare lo stato di una variabile di sessione, mentre uno script parallelo è in esecuzione sul server.


C'è qualcuno che mi può dare una mano?


Grazie!

Pagine: [1]


Web Design Bolzano Kreatif