+ Rispondi alla Discussione
Risultati da 1 a 15 di 15

Azioni di scrittura nello stesso istante

Ultimo Messaggio di KevinDavidMitnick il:
  1. #1
    Banned L'avatar di alessiofbt
    Data Registrazione
    Oct 2006
    Località
    Php City
    Messaggi
    136

    Azioni di scrittura nello stesso istante

    Mettiamo il caso che due o più utenti inviano un semplice form di registrazione dati nello stesso istante.

    La registrazione dei dati viene eseguita in un file con i permessi di scrittura consentiti.

    In questo caso può esserci una corruzione del file?

    Se si è possibile risolvere in qualche modo il problema?

  2. #2
    User
    Data Registrazione
    Mar 2007
    Località
    napoli
    Messaggi
    12
    Non vorrei dire una cretinata però mysql è predisposto per avere connesioni conteporaneamente quindi non dovresti avere problemi, se invece usi file di testo come database, avresti problemi.

  3. #3
    Banned L'avatar di alessiofbt
    Data Registrazione
    Oct 2006
    Località
    Php City
    Messaggi
    136
    Citazione Originariamente Scritto da Dartfira Visualizza Messaggio
    Non vorrei dire una cretinata però mysql è predisposto per avere connesioni conteporaneamente quindi non dovresti avere problemi, se invece usi file di testo come database, avresti problemi.
    E come posso risolverli?

  4. #4
    Banned L'avatar di alessiofbt
    Data Registrazione
    Oct 2006
    Località
    Php City
    Messaggi
    136
    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?

    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
    Ultima modifica di alessiofbt; 11-03-07 alle 20:39

  5. #5
    User
    Data Registrazione
    Mar 2007
    Località
    napoli
    Messaggi
    12
    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.

  6. #6
    Esperto L'avatar di olaola
    Data Registrazione
    Jan 2007
    Località
    Bologna
    Messaggi
    704
    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...

  7. #7
    Banned L'avatar di alessiofbt
    Data Registrazione
    Oct 2006
    Località
    Php City
    Messaggi
    136
    Citazione Originariamente Scritto da olaola Visualizza Messaggio
    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

  8. #8
    Esperto L'avatar di piccolo socrate
    Data Registrazione
    Sep 2006
    Località
    Roma, che domande!
    Messaggi
    503
    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.

  9. #9
    Banned L'avatar di alessiofbt
    Data Registrazione
    Oct 2006
    Località
    Php City
    Messaggi
    136
    Citazione Originariamente Scritto da piccolo socrate Visualizza Messaggio
    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

  10. #10
    Esperto L'avatar di olaola
    Data Registrazione
    Jan 2007
    Località
    Bologna
    Messaggi
    704
    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!!!

  11. #11
    Banned L'avatar di alessiofbt
    Data Registrazione
    Oct 2006
    Località
    Php City
    Messaggi
    136
    Citazione Originariamente Scritto da olaola Visualizza Messaggio
    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

    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

    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?

  12. #12
    Esperto L'avatar di olaola
    Data Registrazione
    Jan 2007
    Località
    Bologna
    Messaggi
    704
    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'...

  13. #13
    Banned
    Data Registrazione
    Feb 2009
    Messaggi
    2
    Ho trovato una riga che volevo mostrare qui per chiedere una cosa:

    Codice PHP:
                      $filetoopen $ub['home_path'].'forum'.$inforum.'/list.php';
                      
    $list get_file($filetoopen);
                      
    $lst fopen($filetoopen,'r+');
                      
    lock_file($lst); 
    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.
    Ultima modifica di Andrez; 04-02-09 alle 04:17 Motivo: Maiuscole e punteggiatura

  14. #14
    Esperto L'avatar di olaola
    Data Registrazione
    Jan 2007
    Località
    Bologna
    Messaggi
    704
    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.


  15. #15
    Banned
    Data Registrazione
    Feb 2009
    Messaggi
    2
    Edit:

    * Inizia i messaggi con una maiuscola e termina con un punto.
    * non sono tollerati flame e polemiche.
    Ultima modifica di Andrez; 04-02-09 alle 04:16

+ Rispondi alla Discussione

Tag per Questa Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.