1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[PHP] fclose() dá warning

Discussão em 'Web Development' iniciada por Armadillo, 17 de Janeiro de 2008. (Respostas: 12; Visualizações: 937)

  1. Armadillo

    Armadillo Folding Member

    este é o meu erro:
    Warning: fclose(): supplied argument is not a valid stream resource in /opt/...


    PHP:
    //...

    if(file_exists($file))
        {
        
    $handle fopen ($file,"r");
        while ((
    $tuplo fgetcsv($handle524288 "    ")) !== FALSE)     
        
        { 
            
    //...        
            
                
        
    }
        
    fclose($handle);//    fclose($file);
        
    }

    //...
    Alguem me consegue ajudar a decifrar porque é que esta treta dá warning??

    cumpz
     
  2. CoolMaster

    CoolMaster Power Member

    Porque o ficheiro não foi bem aberto e logo o $handle não contem um file resource válido.
     
  3. Armadillo

    Armadillo Folding Member

    nao foi bem aberto?? então nao é como fiz?

    é que consigo manipular o conteudo...
     
  4. CoolMaster

    CoolMaster Power Member

    Consegues manipular o conteúdo? Isso é estranho! Então só podes ter algo dentro do loop que esteja a tirar a resource ao $handle .
     
  5. anjo2

    anjo2 Power Member

    má programação, devia era te dar mais warnings :lol:

    PHP:
    //...

    if(file_exists($file))
        {
        
    $handle fopen($file"r");
        while (
    $tuplo fgetcsv($handle524288 "    "))
        
        { 
            
    //...        
            
                
        
    }
        
    fclose($handle);  //    fclose($file);
        
    }
    já viste com outros ficheiros?
     
  6. Gurzi

    Gurzi Power Member



    Porque dizes má programação ?
    o fgetcsv faz um return de false quando o ficheiro não existe ou quando atinge o EOF logo sai do while limpinho.
     
  7. anjo2

    anjo2 Power Member

    Então estás a verificar 2 vezes para quê? O while funciona enquanto a condição for verdadeira, estar a verificar 2 vezes não vale a pena.
     
  8. Armadillo

    Armadillo Folding Member

    PHP:
    @fclose($handle); 
    assim tá ignorado o warning (isto sim, se calhar é má programação, mas serve muito bem para o que quero:002:)

    então acham má programação verificar duas vezes se um ficheiro existir? E se, no entretanto, o ficheiro for eliminado? E se o ficheiro existir e nao for de um formato conhecido (nao csv)?

    Isto tá no manual do PHP:
    fgetcsv() retorna FALSE ao encontrar um erro, incluindo fim de arquivo (eof).


    Obrigado pela ajuda
    Topico fechado.
     
  9. anjo2

    anjo2 Power Member

    Tás a verificar 2 vezes se é true ou false...
    Secalhar existe algo mal dentro do while
     
  10. Armadillo

    Armadillo Folding Member

    nada. apenas tratamento de strings.
    Para tirar as duvidas aqui fica o codigo


    PHP:
    //...
    if(file_exists($file))
        {
        
    $handle fopen ($file,"r");
        while ((
    $tuplo fgetcsv($handle524288 "    ")) !== FALSE)     
        
        { 
            
    $FactOrigem str_replace('.txt','.html',$tuplo[0]);
            
    $DescFact $tuplo[1];
            
    $DataFact $tuplo[2];
            
    $CodProd $tuplo[3];
            
    $DescProd $tuplo[4];
            
    $quant $tuplo[5];
            
    $PrecoUnit $tuplo[6];

                                                                                  
            
    $FactOrigem $Ano'/' $Armazem '/' .  $FactOrigem;                           
           
            
    $prefixo substr($FactOrigem8); //ficamos com ARMAZEMYYYYNNNNN-cvx
            
    $prefixo substr($prefixo,0,strpos($prefixo,'-')); //ficamos com ARMAZEMYYYYNNNNN
            
    $prefixo substr($prefixo,strlen($prefixo)-9,6);
            
            
                  
            
        
            
    $linhasFact    $linhasFact 
            
    '<tr>
            <td style="width: 120px" class="style5"><a href="'
    $endereco_SugarCRMSync $prefixo '/' $FactOrigem .'" target="_blank">'$DescFact .'</a><br />
            '
    $DataFact .'</td>
            <td style="width: 645px" class="style5">' 
    $CodProd ' - ' $DescProd '</td>
            <td style="width: 65px" class="style3">' 
    $quant .'</td>
            <td style="width: 85px" class="style3">' 
    .  $PrecoUnit '</td>
            </tr>'

            
            
                
        }
        @
    fclose($handle);//    fclose($file);
        
    }
    //...
     
    Última edição: 18 de Janeiro de 2008
  11. CoolMaster

    CoolMaster Power Member

    Tu ai tens close() e não fclose()
     
  12. Armadillo

    Armadillo Folding Member

    erro de digitação (corrigido), mas mesmo assim, continua a dar warning se retirar @
     
  13. anjo2

    anjo2 Power Member

    PHP:
    <?php
            ini_set
    ('display_errors''1');
            
    error_reporting (E_ALL); // Report everything
            
    $file "ficheiro.txt";
            if(
    file_exists($file)) {
                    
    $handle fopen($file,"r");
                    while(
    $tuplo fgetcsv($handle524288 "\n")) {  
                    }
                    
    fclose($handle);//    fclose($file);
            
    }
    ?>
    Exactamente com este código, não me deu nenhum warning...
     

Partilhar esta Página