Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755

    Strano comportamento fopen


    in una pagina php modifico delle voci di un file, creandomene prima uno di backup

    Codice PHP:
    $renamedFile=getFileNewName($theFile);
    $arFor2Del=$HTTP_POST_VARS["sel"];
    //print "Eliminare codici:".print_R($HTTP_POST_VARS["sel"],true)."
    \n";/**/

    if(rename(
    $theFile,$renamedFile)){
        if((
    $arFile=file($renamedFile))!==FALSE){
            if(
    $fp=fopen($theFile.".tmp","w")){
                for(
    $i=0;$i<count($arFile);$i++){
                    
    $arRiga=explode(";",$arFile[$i]);
                    
    $codFor=$arRiga[0];
                    //print "
    $codFor è fra quelli da eliminare?";
                    if(!in_array(
    $codFor,$arFor2Del)){
                        //print "
    no";
                        if(!fwrite(
    $fp,$arFile[$i])){
                            
    $temp="Errore in scrittura";
                            break;//esco dal for
                        }
                        //print " 
    (scritto ".$arFile[$i].")";
                    }
                    //print "
    \n
    ";
                }/**/
                fclose(
    $fp);
                if(!rename(
    $theFile.".tmp",$theFile)){
                    
    $temp="Errore salvataggio da tmp";
                }
            }else{
                
    $temp="Errore creazione file $theFile.tmp ";
            }
        }else{
            
    $temp="Errore apertura file backup$renamedFile ";
        }
    }else{
        
    $temp="Errore creazione file backup$renamedFile ";

    $theFile contiene il path completo del file da modificare
    getFileNewName($theFile) ritorna il nome del file più una parte annomesegiorno

    il problema è che quando vado a riaprire $theFile me lo trovo uguale a prima delle modifiche (le varie print mi confermano quando entro nei vari rami if)
    da cosa potrebbe dipendere? è php o qualche problema di cache OS (centOS)?
    oppicò:
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  2. #2
    $HTTP_POST_VARS
    Ciao!

  3. #3
    Il codice, per quanto passibile di migliorie sul lato chiarezza, mi sembra funzionante. Probabilmente il problema e' nell'array $arFor2Del, verifica cosa contiene.

  4. #4
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    @ fmortara: è codice vecchio
    @ k.b : se hai suggerimenti sulle migliorie sono bene accetti per quanto riguarda $arFor2Del direi che è valorizzato a dovere (nel codice qui sopra i print sono commentati, ma nei test che ho fatto e ciò che viene scritto a video è corretto)
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  5. #5
    Esempio, tu adatta coi tuoi valori:
    Codice PHP:
    $theFile     'theTest.txt';
    $renamedFile 'theTestBAK.txt';
    $arFor2Del   = array('due''quattro''sei');

    if ( !
    rename($theFile$renamedFile) ) 
        die(
    'Impossibile creare il backup');

    if ( (
    $contents file($renamedFile)) === FALSE )
        die(
    'Impossibile leggere il file');

    $output '';

    foreach ( 
    $contents as $line ) {
        
    $value array_shift(explode(';'$line));
        if ( !
    in_array($value$arFor2Del) )
            
    $output .= $line;
    }

    if ( !
    file_put_contents($theFile$output) )
        die(
    'Impossibile scrivere sul file'); 
    file usato per il test:
    codice:
    uno;prova1
    due;prova2
    tre;prova3
    quattro;prova4
    cinque;prova5
    sei;prova6
    sette;prova7

  6. #6
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    ok
    l'ho un po' adattato al mio
    Codice PHP:
    $renamedFile=getFileNewName($theFile);
    $arFor2Del=$HTTP_POST_VARS["sel"];
    //print "Eliminare codici:".print_R($HTTP_POST_VARS["sel"],true)."
    \n";/**/

    if(rename(
    $theFile,$renamedFile)){
        if((
    $arFile=file($renamedFile))!==FALSE){
            
    $output="";
            foreach(
    $arFile as $riga){
                
    $codFor=array_shift(explode(';', $riga));
                //print "
    $codFor è fra quelli da eliminare?";
                if(!in_array(
    $codFor,$arFor2Del)){
                    //print "
    no";
                    
    $output.=$riga;
                    //print " 
    (scritto ".$arFile[$i].")";
                }
                //print "
    \n
    ";
            }/**/
            if ( !file_put_contents(
    $theFile$output) ) {
                
    $temp="Errore generazione file aggiornato";
            }                        
        }else{
            
    $temp="Errore apertura file backup$renamedFile ";
        }
    }else{
        
    $temp="Errore creazione file backup$renamedFile ";

    ma continuo ad avere il solito problema
    comincio a temere davvero che sia un problema di caching del file
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  7. #7
    Hai provato il mio codice cosi' com'e'? Ti funziona?

    Sei sicuro che $arFor2Del sia un array? Posta l'ouput di
    Codice PHP:
    print_r($arFor2Del); 

  8. #8
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    provo ad usare il tuo codice così om'è, intanto scrivo l'output dei vari print che ci sono nel codice che ti ho postato

    Eliminare codici:Array ( [0] => 000926 [1] => 002778 [2] => 001147 )
    000926 è fra quelli da eliminare?
    002778 è fra quelli da eliminare?
    001147 è fra quelli da eliminare?
    001766 è fra quelli da eliminare?no
    491404 è fra quelli da eliminare?no
    214397 è fra quelli da eliminare?no
    003661 è fra quelli da eliminare?no
    204991 è fra quelli da eliminare?no
    467891 è fra quelli da eliminare?no
    479292 è fra quelli da eliminare?no
    214264 è fra quelli da eliminare?no
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  9. #9
    Utente di HTML.it L'avatar di wallrider
    Registrato dal
    Apr 2003
    Messaggi
    2,755
    il tuo codice paroparo funziona
    RIP Cicciobenzina 9/11/2010

    "Riseminaciceli, i ceci nell'orto"

  10. #10
    Allora non riesco a capire il problema, a me funzionava anche il tuo primo codice :S

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.