Visualizzazione risultati 1 fino 5 di 5

Discussione: Interferenza fopen() DOM

  1. #1
    tryhere non è connesso AlterVistiano
    Data registrazione
    19-09-2007
    Messaggi
    757

    Predefinito Interferenza fopen() DOM

    Codice PHP:
    $dom=new DOMDocument();
    $dom->load("file.xml");
    $dom->save("file.xml");
    Questo codice legge un file e lo salva. L'esecuzione non da problemi.
    Codice PHP:
    $fp=fopen("file.xml", "r+");
    if (
    flock($fp, LOCK_EX)) {

    $dom=new DOMDocument();
    $dom->load("file.xml");
    $dom->save("file.xml");

    flock($fp, LOCK_UN);[/B]
    }
    //if [/B]
    fclose($fp);
    Questo codice (un'interazione del precedente con fopen() e flock()) mi genera due warning:
    Codice:
    Warning: DOMDocument::load() [domdocument.load]: Document is empty in file
    Codice:
    Warning: DOMDocument::load() [domdocument.load]: Start tag expected, '<' not found in file
    Inoltre dopo l'esecuzione dello script il file XML risulta completamente vuoto.
    Qual'è il problema?

  2. #2
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Cioè stai hai usato fopen inutilmente...
    Ti consiglio di fare così:

    Codice PHP:
    $fp=fopen("file.xml", "r+");
    if (
    flock($fp, LOCK_EX)) {
    $xml=fread($fp, filesize("file.xml"));
    $dom=new DOMDocument();
    $dom->load_string($xml);
    fwrite($fp, $dom->saveXML());
    flock($fp, LOCK_UN);
    }
    fclose($fp);
    Saluti!

  3. #3
    tryhere non è connesso AlterVistiano
    Data registrazione
    19-09-2007
    Messaggi
    757

    Predefinito

    siccome preferirei utilizzare load() e save() cercavo di capire qual'era il problema del codice che avevo scritto sopra, anche perchè con la tua soluzione tutto il file viene letto in una stringa e poi la stringa viene passata al documento...troppo pesante secondo me.

  4. #4
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    A questo punto puoi anche evitare di usare fopen (e quindi al blocco), dato che vuoi usare soltanto load e save
    Comunque non è per niente pesante

    Saluti!

  5. #5
    tryhere non è connesso AlterVistiano
    Data registrazione
    19-09-2007
    Messaggi
    757

    Predefinito

    Perchè? Io voglio gestire l'eventualità in cui due processi accedano contemporaneamente al file quindi mi serve fopen e anche flock.
    Pesante nel senso che c'è un passaggio di variabile molto grande.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •