Pagina 1 di 1

AJAX: stop funzione php

Inviato: mar ago 28, 2012 12:00
da rfringuello89
Salve a tutti, esiste un modo per fermare una funzione PHP chiamata tramite AJAX la quale ha un time_limit 0 ?

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 12:49
da ZeroUno
Si. Un'altro file php richiamato da ajax che killa il php in corso.
Ajax è running sul tuo pc, php è running sul server. Non c'è altra via che un intermediario.

Comunque hai time_limit 0 in php.ini? Questa è una cosa che non si fa!

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 12:52
da rfringuello89
No setto il time limit in quella particolare funzione perchè mi serve che stia attiva fino a quando non sono io a decidere di ucciderla. Come faccio a killare il php?

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 14:46
da ZeroUno
Ma lo script php come lo lanci? Da una pagina web? Da command line?

Se lo lanci da pagina web come logica appena l'utente preme stop questo dovrebbe morire.
Inoltre se lo script produce output c'è il problema del flushing.

In ogni caso dovresti trovare il modo di beccare il pid dello script php e poi fare un altro script php, richiamato da ajax, che fa system("kill $pid"); o simile.
Per beccare il pid puoi dare system("ps qualcosa") ma è pericoloso.
Una idea è che quando lanci lo script php (che a questo punto è chiamabile anche demone in verità) questo si segni il pid da qualche parte (tipo un pidfile) e lo script kill.php legga tale file e killi quanto indicato lì.

Comunque, come dicevo all'inizio, tutto dipende da come lanci lo script php demone.

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 15:01
da rfringuello89
Lo script viene chiamato tramite AJAX da pagina web, stò provando a fare come mi hai detto, il problema è che non riesco a farmi rendere il pid prima che la funzione termini (e a quel punto sarebbe del tutto inutile)

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 16:00
da ZeroUno
prova con getmypid

Non ho ben capito quello che devi fare, ma nono è una buona idea richiamare un php che debba rimanere up all'infinito da una funzione ajax perchè se l'utente preme F5 viene lanciato un secondo processo e il primo non muore.
Inoltre il browser dovrebbe rimanere in "attesa che la pagina carica" in eterno e lasci la connessione in established senza fare traffico (e con le ultime impostazioni predefinite di apache tra l'altro la connessione verrebbe killata).

Ancora di più... essendo uno script ajax a richiamarlo (e quindi javascript) dopo un po' firefox ti dirà "c'è uno script che non sta rispondendo. lo uccido?" o simile.
Inoltre, sempre soprattutto perchè è uno script ajax, è poco utile che lo script rimane running perchè ajax non può utilizzare l'output di uno script php finchè questo non termina.

E ancora... no_limit lo piazzi sul tuo pc. Nessun server di produzione al mondo avrà un timeout impostato ad infinito, per questioni di sicurezza e di stabilità della macchina.

Puoi essere più specifico su quello che ti serve?

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 16:54
da rfringuello89
Era una cosa concettualmente semplice e che comunque sarebbe rimasta su una rete locale, ho momentaneamente deciso di lasciare perdere perchè troppo intricato. Grazie dell'aiuto ;)

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 16:59
da ZeroUno
Dimmi solo una cosa...
ma l'esecuzione di questo script doveva essere limitato alla durata di vita del browser?
Cioè, se chiudo il browser che dovrebbe succedere a quel processo?

Re: AJAX: stop funzione php

Inviato: mar ago 28, 2012 17:28
da rfringuello89
Il processo termina alla chiusura del browser o quando voglio io (e.g. con un pulsante)