Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    36

    PHP avviare processi in background senza interrompere navigazione

    Ciao a tutti! Sto iniziando a lavorare con il PHP, ma adesso mi ritrovo davanti ad un piccolo problema.

    L'utente navigando sul sito ha la possibilita' di chiamare una pagina PHP in background che esegue alcune funzioni. Quello che vorrei fare io e' avviare tutti i processi, senza interrompere o compromettere la navigazione dell'utente.

    Nonostante quella pagina ingori l'eventuale chiusura della connessione e abbia tutti gli sleep settati per bene, se l'utente avvia il processo non si riesce piu' a navigare sul sito fino a quando il PHP di quella pagina non smette di elaborare tutte le informazioni (e non e' poco tempo, ci mette dai 3 agli 8 minuti).

    Conoscete qualche metodo per rendere quella pagina indipendente dal resto del sito?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Devi usare AJAX.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    36
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Devi usare AJAX.
    La pagina parte gia' da una chiamata AJAX, ma non sembra risolvere il problema.

    Piu' o meno il funzionamento e' il seguente: ho una pagina sul sito su cui c'e' un bottone che fa partire una chiamata AJAX verso una pagina in "background".

    L'utente viene notificato dell'avvio delle operazioni tramite un popup. Solo che se cerca di andare in altre pagine, come ad esempio potrebbe essere l'home page, il caricamento di queste non finisce mai, ma continua e rimane in sospeso fino a quando la pagina in "background" non ha finito di fare tutte le operazioni.

    A quel punto la navigazione sul sito ritorna normale.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Specifica che la chiamata sia asincrona, altrimenti anche la chiamata ajax aspetta il completamento dello script.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    36
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Specifica che la chiamata sia asincrona, altrimenti anche la chiamata ajax aspetta il completamento dello script.
    Gia' specificato. Il problema non e' tanto dello script quanto del PHP, tutto il sito utilizza quel linguaggio. Facendo varie prove e' come se fosse piu' un problema di sessione. Con un browser diverso il sito funziona, mentre sul browser che ha chiamato le pagine (qualisiasi pagina del sito) non si carica piu' fino a quando non ha finito di eseguire tutte le funzioni.

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Certo che se usi un altro browser il sito funziona, non è certo il server a restare in attesa della terminazione dello script.

    Evidentemente la tua logica di chiamate ed esecuzione degli script è errata.

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    36
    Ok, provo ad incollare il codice, non so piu' dove sbattere la testa:

    codice:
    var req = new XMLHttpRequest();
    req.open("POST", "/pagina_con_il_servizio_da_avviare_in_background.php", true);
    req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    Questo invece il codice php

    Codice PHP:

    ignore_user_abort
    (true);
    set_time_limit(600);

    // Esegui primo blocco di istruzioni

    sleep(60);

    // Esegui secondo blocco

    sleep(300);

    // Esegui terzo blocco

    die(); 

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il problema non è PHP, ma Javascript, evidentemente il modo in cui chiami lo script non va bene, probabilmente resta in attesa di una risposta.

    Chiedi nella sezione Javascript come va fatto in modo corretto.
    Ovviamente se devi avere una risposta da PHP non hai scampo, devi restare sulla pagina, se invece PHP non deve restituire nulla allora va bene.

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    36
    Quote Originariamente inviata da Alhazred Visualizza il messaggio
    Il problema non è PHP, ma Javascript, evidentemente il modo in cui chiami lo script non va bene, probabilmente resta in attesa di una risposta.

    Chiedi nella sezione Javascript come va fatto in modo corretto.
    Ovviamente se devi avere una risposta da PHP non hai scampo, devi restare sulla pagina, se invece PHP non deve restituire nulla allora va bene.
    Grazie per per l'aiuto. Adesso per sicurezza provo a chidere anche di la. Ma resto abbastanza sicuro che il problema sia PHP perche' se anche apro un altra pagina da un altra scheda/clicco sul link per la home/oppure interrompo il caricamento e vado da un altra parte le pagine comunque non si caricano fino a quando il processo PHP non finisce.

  10. #10
    Utente di HTML.it L'avatar di boots
    Registrato dal
    Oct 2012
    Messaggi
    1,626
    Secondo me non è possibile con ajax, anche asincrono.
    Non credo sia possibile cambiare pagina mentre è in esecuzione uno script (cosa fà, lavora su una pagina che non c'è più?)

    Secondo me dovresti vedere se ti è possibile chiamare (senza attendere risposta) un secondo script php (quello che fa le cose in backgroud) da un altra pagina php (che chiama l'utente). Ovviamente così diventa difficile gestire lo script in background
    Ad esempio, su linux
    exec("php background.php $args > /dev/null &");
    Ultima modifica di boots; 01-07-2014 a 12:15

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.