Read a file in php

2

My screen, can list the files as a link and even displays on another tab with the target, I just can not get the file clicked to display the content.

I'm using fopen to open and fread to read ...

Here's how the code works:

<?php

   foreach(new DirectoryIterator('C:\xampp\htdocs\testtoclassificados\log') as $fileInfo){

       if($fileInfo->isDot())continue;
       if($fileInfo->isFile()){ 

       $arquivo  = $fileInfo->getPathname(); 

       if($fileInfo->isReadable() == true){
         $fp       = fopen($arquivo,"r");
        $texto    = fread($fp, filesize($arquivo));
         fclose($fp);
          echo"<li><a href='".$arquivo."' target='_blank'>".$arquivo."</a>
          <br/></li>";
       }else echo "O arquivo ".$arquivo." não possuí permissão de leitura.";
      }
   }         
  ?>

Displays these errors when I use fopen and fread:

Warning: fopen(.): failed to open stream: Permission denied in 
C:\xampp\htdocs\testtoclassificados


Warning: fread() expects parameter 1 to be resource, boolean given in

Warning: fopen(apostila2.pdf): failed to open stream: No such file or directory in C:\xampp\htdocs\testtoclassificados

Is the code logic wrong?

My screen only does not open another tab with the contents of the file ...

    
asked by anonymous 17.12.2017 / 14:05

1 answer

0

To better understand the problem, you can add a debugger to your code in this way.

<?php
    foreach(new DirectoryIterator('C:\xampp\htdocs\testtoclassificados\log') as $fileInfo){
       echo "<pre>"; print_r($fileInfo); echo "</pre>";
       /*$fp = fopen($fileInfo,"r");
       $texto = fread($fp, filesize($fileInfo));
       if($fileInfo->isDot())continue;
       $arqName = $fileInfo->getFilename();  
       // $handle = $fileInfo->fopen("c:\data\info.txt", "r");*/
    }
?>

Use print_r to print on the screen the instance of the DirectoryIterator class returned by each interaction in your foreach loop. Each print object is a file or directory within the log directory. You are using the instance of the fileInfo object as the path to the file, and it is actually an object instance with methods and attributes. Follow the examples in the DirectoryIterator documentation. Then remove the comment I added and check the last file or directory that the php code displays the error message. Make sure you are not trying to use fopen in a directory. It has to validate the condition for the fopen to read only files.

<?php
    foreach(new DirectoryIterator('C:\xampp\htdocs\testtoclassificados\log') as $fileInfo){
           //Se for . ou .. pular para a próxima interação do laço.               
           if($fileInfo->isDot())continue;
           if($fileInfo->isFile()){
               //DirectoryIterator::getPathname — Retorna o caminho e o nome 
               //do arquivo do elemento atual do diretório
               $arquivo  = $fileInfo->getPathname(); 
               // Abre para leitura mas antes verifica se o arquivo
               // tem permissão de leitura.
               if($fileInfo->isReadable() == true){
                  $fp       = fopen($arquivo,"r");
                  $texto    = fread($fp, filesize($arquivo));
                  echo $texto."<br/><br/>";
                  fclose($fp);
              }else echo "O arquivo ".$arquivo." não possuí permissão de leitura.";  
          }
    }
?>

To do a list of files with links and open in new tab do so:

<?php
    foreach(new DirectoryIterator('C:\xampp\htdocs\testtoclassificados\log') as $fileInfo){
      //Se for . ou .. pular para a próxima interação do laço.               
      if($fileInfo->isDot())continue;
        if($fileInfo->isFile()){
          //DirectoryIterator::getPathname — Retorna o caminho e o nome 
          //do arquivo do elemento atual do diretório
          $arquivo  = $fileInfo->getPathname(); 
          // Abre para leitura mas antes verifica se o arquivo
          // tem permissão de leitura.
          if($fileInfo->isReadable() == true){
              $fp       = fopen($arquivo,"r");
              $texto    = fread($fp, filesize($arquivo));
              fclose($fp);
              // A variavel $arquivo recebeu o valor do método contido 
              //dentro da intância da classe DirectoryInterator.
              //Dentro desse objeto existe o método que retorna o caminho 
              //completo até o arquivo, como mostrado abaixo
              //$fileInfo->getPathname(), portanto a variavel $arquivo possuí 
              //o path completo uma vez que definida acima.
              $urlLeitor  = "http://localhost/leitor.php?arquivo=".$fileInfo->getFilename(); 
              echo"<li><a href='".$urlLeitor."' target='_blank'>".$texto."</a>
              <br/></li>";
           }else echo "O arquivo ".$arquivo." não possuí permissão de leitura.";  
       }
    }
?>
    
17.12.2017 / 14:51