Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 23
  1. #1

    Accesso simultaneo a file xml

    Ho uno script PHP che memorizza su un file XML alcuni dati relativi all'utente che si sta registrando sul mio sito.
    Supponiamo che due utenti si registrino nel mio sito quasi contemporaneamente.
    Lo script lanciato dalla registrazione dell'utente A legge il file XML (che supponiamo ancora vuoto).
    La stessa cosa fa lo script lanciato dall'utente B.
    Lo script lanciato da A aggiunge al file vuoto la riga relativa all'utente A e salva le modifiche.
    Lo script B (che ha letto il file vedendolo vuoto) aggiunge la riga relativa all'utente B e salva le modifiche.
    Risultato finale: il file XML dopo l'esecuzione degli script contiene solo la riga relativa all'utente B.
    Come posso ovviare a questo problema?

  2. #2
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Mysql.

  3. #3
    consiglio mysql pure io, o all'estremo anche sqlite, ma se proprio devi usare XML direi che dovresti cambiare metodologia di lavoro e realizzare un sistema di sincronizzazione che anche se non può essere preciso al 100%, soprattutto su windows, no darà problemi se non sotto ESTREMO carico

    www.php.net/flock
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  4. #4
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    GIa' , pero' a mio avviso e' sempre un problema risolvere la sincronizzazione su sistemi web dove e' tutto stateless.

    Per questo si usano i database che gestiscono gia' la concorrenzialita'.

    Pensa ad una soluzione su database.

    ANche se puoi bloccare un file e due utenti si registrano nello stesso istante e accedono al file nello stesso momento a meno che tu non faccia qlke ciclo con qlke sleep, per evitare gli errori in fasi di accesso ad un file "lokkato", dovresti davvero smazzarti per gestire un caso che con un database non ti si presenta quasi mai.

  5. #5
    non ho capito bene come funziona flock...serve a gestire la sincronizzazione?

  6. #6
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    flock = File LOCK
    serve a bloccare il file in fase di accesso.

    Ossia blocca il file da altri accessi in base alle flag che passi alla funzione.

    Controlla bene ma io continuo a consigliarti il database.

  7. #7
    Assolutamente consigliato un database!
    Anche nel caso tu gestisca i lock dei file,
    dovresti anche gestire il caso in cui il file venga trovato bloccato,
    e mettere lo script in 'attesa' dello sbloccaggio... pessima soluzione in ambiente web a mio avviso
    Artechbrand.it: Realizzazione siti E-commerce -
    Trova il miglior prezzo con Prezzolandia.it

  8. #8
    Quindi con flock risolverei completamente il mio problema, o sbaglio?

  9. #9
    Originariamente inviato da Artechbrand
    Assolutamente consigliato un database!
    Anche nel caso tu gestisca i lock dei file,
    dovresti anche gestire il caso in cui il file venga trovato bloccato,
    e mettere lo script in 'attesa' dello sbloccaggio... pessima soluzione in ambiente web a mio avviso
    invece di aspettare all'infinito attendi per 5 secondi ... per 10 secondi ... e poi fai dare errore


    alternativamente una soluzione che faccia uso dei semafori non è una cattiva idea

    http://www.php.net/sem
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Scusa daniele_dll

    ma visto che stiamo parlando di una registrazione su di un sito web
    sai che bello fare attendere il tuo utente... e poi rispondergli pure con un errore?
    Bah
    Artechbrand.it: Realizzazione siti E-commerce -
    Trova il miglior prezzo con Prezzolandia.it

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.