Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    52

    utilizzo corretto del ignore_user_abort

    Come progetto vorrei creare un gioco il problema è che voglio mettere al giocatore la possibilità di aumentare i suoi punti salute di un punto per ogni secondo che passa dal momento in cui clicca sull'apposito link fino ad un massimo di due ore:
    Codice PHP:
    ob_start();
    $Username $_SESSION['ID'];
    $datain mysql_result(mysql_query("SELECT InizioAdd FROM TBLutenti WHERE Username LIKE '$Username'"), 0);
    $datafi mysql_result(mysql_query("SELECT FineAdd FROM TBLutenti WHERE Username LIKE '$Username'"), 0);

    if(
    $_GET['pag'] == 'salute'){
    //stabilisce la data attuale
    $datain=date("Y-m-d H:i:s");
    mysql_query("UPDATE TBLutenti SET InizioAdd='$datain' WHERE Username = '$Username'");

    //stabilisce la data finale ovvero la data attuale + 2 ore
    $datafi=date("Y-m-d H:i:s",mktime (date("H")+2,date("i"),date("s"),date("m") ,date("d"),date("Y")));
    mysql_query("UPDATE TBLutenti SET FineAdd='$datafi' WHERE Username = '$Username'");

    set_time_limit(0);
    for (
    $i=0$i<7200$i=$i+1){
    ignore_user_abort(true);
    mysql_query("UPDATE TBLutenti SET Salute=Salute+1 WHERE Username = '$Username'");
    sleep (1);
    header('Location: Profilo.php');
    }

    il problema è che nonostante l'header sotto lo sleep il ciclo continua per due ore,se chiudo il browser e lo riapro cioè facendo un logout forzato e faccio il login lo script funziona come dovrebbe. Ho pensato di trasferire la parte del ciclo in un'altra pagina però non saprei come farla partire, cioé con l'ignore_user_abort l'utente entra nella pagina prima e lo script parte, mentre se voglio far partire lo script senza neanche entrare nella pagina cosa uso?

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    "Cron" se sei su server Linux, "Operazioni Pianificate" se sei su server Windows.
    Per saperne di più, chiedi nella sezione "Server" adeguata, in quanto non è un problema di PHP.

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    52
    ok grazie

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Rileggendo il tuo messaggio potrei aver capito male cosa devi fare.
    Tu vuoi che l'utente acceda ad una pagina e questa faccia partire uno script che si trova su un altro file al quale NON vuoi accedere direttamente?
    Se così fosse puoi anche inviare una richiesta asincrona a tale file dalla pagina che l'utente visita.
    Per farlo devi usare AJAX e in tal caso chiedi informazioni nella sezione Javascript.

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    52
    quella sarebbe un eventualità ma siccome non ho mai studiato l'ajax preferire evitare quella strada e preferirei risolvere il problema tutto in php anche in una sola pagina, un esempio forse più comprensibile sono ad esempio gli annunci come quelli di subito.it che una volta inseriti si auto-eliminano dopo 60 giorni. nel mio caso non riesce a partire l'header nonostante in alto ho messo ob_start();

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Quelli si autoeliminano dopo 60 giorni usando uno script attivato automaticamente ogni TOT tempo, si fa appunto con CRON oppure Operazioni Pianificate come ti ho detto in precedenza.
    Ogni TOT tempo si avvia uno script che eseguirà una query che eliminerà le inserzioni in base al timestamp di quando sono state inserite.

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.