[PHP] fclose() dá warning

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($handle, 524288 , "    ")) !== FALSE)     
    
    { 
        //...        
        
            
    }
    fclose($handle);//    fclose($file);
    
}

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

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

PHP:
//...

if(file_exists($file))
    {
    $handle = fopen($file, "r");
    while ($tuplo = fgetcsv($handle, 524288 , "    "))
    
    { 
        //...        
        
            
    }
    fclose($handle);  //    fclose($file);
    
}
já viste com outros ficheiros?
 
má programação, devia era te dar mais warnings :lol:

PHP:
//...

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



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.
 
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.
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.
 
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.
 
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($handle, 524288 , "    ")) !== 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($FactOrigem, 8); //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:
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($handle, 524288 , "\n")) {  
                }
                fclose($handle);//    fclose($file);
        }
?>

Exactamente com este código, não me deu nenhum warning...
 
Back
Topo