• Bannato User Attivo

    Per esempio non ci potrebbe essere la possibilità di inserire una breve pausa prima di dare l'azione fwrite al server?

    Cosi che se io posto in un determinato momento insieme ad un altro utente, entrambi non riceviamo lo stesso tempo di scrittura, ma con una pausa generata diversa in base al tempo e ad altre varianti.

    Esiste questo? :mmm:

    Per esempio sleep() può essermi utile per quello che devo fare?

    In alcuni esempi dove è stata usata questa funzione ho anche trovato prima di qualche riga questa:

         fflush($fp); 
    

    Dove $fp è il fopen di un file con permessi di scrittura

    Ho provato a vedere cosa fa il fflush() ma non ho ben capito 😞


  • User

    Purtoppo non so darti una risposta a questo, però ti sconsiglio di usare file di testo come database, ti conviene usare un database mysql che non ti da tutti questi problemi.


  • User Attivo

    puoi usare flock

    http://it2.php.net/manual/it/function.flock.php

    per bloccare l'accesso al file mentre ci scrivi, in modo che altri non possano farlo nello stesso momento...


  • Bannato User Attivo

    @olaola said:

    puoi usare flock

    http://it2.php.net/manual/it/function.flock.php

    per bloccare l'accesso al file mentre ci scrivi, in modo che altri non possano farlo nello stesso momento...

    Praticamente perfetto 😄

    Grazie


  • User Attivo

    si ma se usi flock() devi poi considerare una procedura d'errore per il form, visto che solo uno degli utenti andrà a scrivere..

    per evitare questi casi conviene sempre e solo il database.


  • Bannato User Attivo

    @piccolo socrate said:

    si ma se usi flock() devi poi considerare una procedura d'errore per il form, visto che solo uno degli utenti andrà a scrivere..

    per evitare questi casi conviene sempre e solo il database.

    E pazienza se è talmente "sfigato" da dover dare il submit nello stesso istante che lo da un altro, può anche tornare indietro e rinviare di nuovo, i dati se sono dentro un textarea o input rimangono :bho:


  • User Attivo

    potresti usare la tecnica che avevi pensato... aspetti un tot di tempo (consiglio usleep al posto di sleep, magari in coppia con rand per generare un numero casuale di microsecondi) e poi ritenti il comando...

    se va male anche la seconda e' sfiga vera!!!


  • Bannato User Attivo

    @olaola said:

    potresti usare la tecnica che avevi pensato... aspetti un tot di tempo (consiglio usleep al posto di sleep, magari in coppia con rand per generare un numero casuale di microsecondi) e poi ritenti il comando...

    se va male anche la seconda e' sfiga vera!!!

    Eheheh davvero 😄

    usleep() è meglio?

    O altrimenti ancora meglio:

    Metto sleep o usleep con microsecondi generati da un rand (), poi una volta arrivato il momento, inizia con la funzione flock() a bloccare :vaiii:

    Cosi che se anche 100 utenti si trovano a fare submit nello stesso momento oltre ad esserci una probabilità su un migliaglio di trovarsi a scrivere nello stesso momento, e se proprio è sfiga vera allora subito dopo il primo che raggiunge si trova flock che blocca l'accesso al file ad altri o alle brutte non consente a nessuno di scrivere, cosi che comunque i dati non subiscono problemi :lol:

    Flock almeno dovrebbe avere una priorità utente vero? cioè conta in microsecondi anche lui? e se capita che flock() viene eseguita praticamente nello stesso istante? avviene un blocco di richieste temporaneo al server? :mmm:


  • User Attivo

    non e' che usleep sia meglio di sleep, ma ti permette di aspettare tot microsecondi, invece che tot secondi... per velocizzare la cosa...

    poi certo il controllo su flock deve rimanere... cioe' se il file e' locckato, l'operazione fallisce e devi prevedere la cosa con un "if".. nella pagina di manuale di flock il primo esempio ti spiega come gestire l'eventualita'...


  • Bannato User Newbie

    Ho trovato una riga che volevo mostrare qui per chiedere una cosa:

    [php] $filetoopen = $ub['home_path'].'forum'.$inforum.'/list.php';
    $list = get_file($filetoopen);
    $lst = fopen($filetoopen,'r+');
    lock_file($lst);[/php]Mi stavo chiedendo ma il lock_file funziona come il flock? no perchè in rete la funzione lock_file non la trovo da nessuna parte.

    Ciauz.


  • User Attivo

    Ciao KevinDavidMitnick e benvenuto nel Forum GT,

    probabilmente la funzione che tu citi è stata creata dall'utente che ha scritto quel codice, per questo non la trovi in rete.

    Comunque dovrebbe essere riportata nella stessa pagina dove hai preso il pezzo di codice.

    :ciauz:


  • Bannato User Newbie

    Edit:

    • Inizia i messaggi con una maiuscola e termina con un punto.
    • non sono tollerati flame e polemiche.