Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885

    fwrite torna false solo quando cancello l'ultima riga del file...

    ciao, mi trovo di fronte ad un dubbio su file...

    io eseguo un operazione di per cancellare delle righe da un file .
    La mia procedura è quella di :
    contare le righe presenti sul file
    esploderle una ad una
    verificare il dato inserito dall'utente con quello presente in una cella dell'array che contiene la riga del file.
    se la cella corrisponde salvo un valore in un altro array
    alla fine di tutte le mie verifiche sovrascrivo il file che ho con quello nuovo (ossia quello contenente tutte le righe meno quella appena cancellata).

    lo script funziona bene, cancella la riga e sovrascrive il file...

    Ho notato che quando esiste solo una riga nel file lo script mi segnala un errore (dal file log che vado a scrivere e dalla mail che mi arriva), ma questo non è un errore calcolato nel senso che la riga la cancella ma la funzione fwrite()mi restituisce false.
    Qualcuno sa il perchè ?

    vi posto il codice
    Codice PHP:
    else if ($cancella == "si"){
        
    $array_f $_SESSION['tabellare'];//carico nella variabile i valori di confronto
        //--->apro il file per cancellare la riga********************************************
        
    $file ="ciccio.csv";//determino la path del file + nome file
        //echo "nome files = " .$file."
    ";
        
    $leggo = file ($file);
        
    $leggo_righe = file($file);//leggo ed inserisco le righe del file in un array
        
    $elements = count($leggo_righe);//conto le righe presenti
            for (
    $i = 0 ; $i < $elements ; $i++) {//ciclo per quante righe sono presenti nel file
        
    $esplosione = explode(";", $leggo_righe[$i]);//esplodo le singole righe in un array
        
    $contoesplosioni = count ($esplosione);
        for (
    $c = 0 ; $c < $contoesplosioni$c++){//ciclo per quanti sono i valori presenti nell'esplosione
          if ( (
    $esplosione[0] == $idanag)&&($esplosione[1] == $numero) ) {//controllo se i campi sono presenti nell'array di controllo
                
    $str="";//se si creo una variabile vuota
          }else {//oppure
            
    $str = implode(";", $esplosione);//inserisco nella variabile il valore della riga esplosa ricomponendola con il carattere separatore;
          }
              
    $leggo_righe[$i] = $str;//sovrascrivo nella variabile i valori appena controllati
              
            } //chiudo ciclo 
    $c
            } //chiudo il ciclo 
    $i
    $apro_sovrascrittura = fopen($file, "w");//apro il file in modalità scrittura partendo dalla prima riga per far sovrascrivere
    foreach (
    $leggo_righe as $sovrascrivo) {//creo un ciclo per l'array modificato
        
    $sovrascrittura = fwrite($apro_sovrascrittura$sovrascrivo);//sovrascrivo il vecchio file con le nuove righe
    }//esco da foreach
    //--->Fine eliminazione riga nel file***************************************************
    $sql_delete = "DELETE";//eseguo il delete per eliminare il record nel database
    fclose (
    $apro_sovrascrittura); 
    qui ovviamente ce il modulo di invio mail se per caso la funzione restituisca false
    Codice PHP:
    if (!$sovrascrittura){
    /*
    *invio la mail agli admin e setto il file log con i dettagli
    */


    grazie anticipatamente

  2. #2
    Che cosa restituisce questo codice:

    Codice PHP:
    var_dump(is_array($leggo_righe));
    var_dump($sovrascrittura); 

  3. #3
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    ho effettuato il var_dump sia su righe che su sovrascrittura e i risultati.

    ho inserito nel mio database e quindi anche nel file 2 record/righe

    ho cancellato la prima ...

    sovrascrittura int(0)
    leggorighe array(1) { [0]=> string(0) "" [1]=>blablabla }

    cancellazione effettuata bene sia su db che su file.

    poi ho cancellato la seconda ... il quale dovrebbe sovrascrivere un file con un altro file completamente vuoto visto chenon ci sono altri record/righe.

    sovrascritturaint(0)
    sovrascritturaarray(1) { [0]=> string(0) "" }

    tecnicamente è corretto . deve sostrituire la righa x con nulla... quindi vuoto

    ed in effetti lo fa, viene cancellato tutto sia da file che da database, ma la funzione fwrite restituisce false.

    il problema nn lo presenterei nemmeno, ma visto che scrivo dei file log e invio mail di avvertimento il problema sussiste. il fatto e che non so come risolverlo.

    Ho capito solo quando viene 'scatenata questa eccezzione', facendo un paio di tentativi e grazie a var_dump(nome_Variabile) ho notato che fwrite tende a tornare false quando l'ultimo valore del mio array è string(0) ossia vuoto...
    come mai succede ciò?

    hai qualche idea? :master:

    grazie milla!

  4. #4
    Come da manuale:

    fwrite() returns the number of bytes written
    Codice PHP:
    var_dump((bool)strlen('')); 

  5. #5
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    lui riporta il valore dei bytes scritti.
    quando ho solo una riga e provo a cancellarla lui sovrascrive 0 byte.
    ma quando ho 4 righe e sovrascrivo il mio file presente su disco con un altro file simile ma con una riga in meno (quindi 3) lui riporta il valore dei bit scritti...

    ma se la riga da eliminare e l'ultima lui sovrascrive il file riportando 0 eppure ha scritto dei bytes!

    cmq ora vedo il risultato di questo var_dump ....

    grazie filippo

  6. #6
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    Codice PHP:
    var_dump((bool)strlen('')); 
    mi restituisce false ... sempre ed in ogni caso... che vuol dire?

  7. #7
    Utente di HTML.it L'avatar di tapu
    Registrato dal
    May 2008
    Messaggi
    885
    up

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.