Autor Zpráva
Jirkasss
Profil *
Ahoj, nemuzu najit nejake sikovne php funkce pro textove soubory, napr. neco jako nacteni radku, skok na redek silo x a pod.Chci si nacitat log z firewallu ktery je normalne dost necitelny a zobrazit si ho v tabulce.
mark92
Profil
PHP vie súbor načítať príkazom:
$obsah = file_get_contents(url);

riadky získaš:
$riadky =  explode("\n",$obsah);

časti riadkov (prípadne znaky) pomocou funkcie:
substr(retazec, pozicia_v_retazci, pocet_znakov);

alebo na vyhľadávanie reťazcov v obsahu môžeš použiť funkciu:
function indexOf($needle, $index, $haystack)
    {
    $dlzka = strlen($needle);
    $limit = strlen($haystack)-$dlzka+1;
    for ($i=$index;$i<$limit;$i++)
      if (substr($haystack,$i,$dlzka) == $needle)
        return $i;
    return -1;
    }
Jirkasss
Profil *
Explode prave radky nedava, je to funkce specielne pro retezce, stim bych prave pracoval az bych nacetl ten radek :(
Keeehi
Profil
Jirkasss:
Explode prave radky nedava
Tak jak to napsal mark92 tak ano, vrátí to obsah souboru rozsekaný do pole podle řádků.

Ten log z firewallu bude mít nejspíše nějakou pevně danou strukturu, takže pro prohledávání bych využil asi regulární výrazy.
Alphard
Profil
[#2] Existuje hotová kombinace file()

Jirkasss:
Logy mohou být hodně dlouhé, pak by nebylo vhodné načítat do paměti celý soubor.
Jirkasss
Profil *
Aha.
k regularnim vyrazum sem zatim nedosel.Zacinam s PHP.
Premejslel sem taky o tom ze bych soubor nacetl a ulozil do tabulky databaze a pak bych mohl vznaset dotazy a lepe tak filtrovat... co myslite?
Mastodont
Profil
Pokud chceš obsah souboru rozsekaný do řádků, tak na to je funkce file().
Joker
Profil
Alphard:
Existuje hotová kombinace file()
A taky funkce pro načtení jednoho řádku fgets().

Jirkasss:
Premejslel sem taky o tom ze bych soubor nacetl a ulozil do tabulky databaze a pak bych mohl vznaset dotazy a lepe tak filtrovat
Je otázka, jestli přidaná hodnota databáze převýší přidanou složitost z toho přenášení.
Jirkasss
Profil *
tak sem to sesmolil :) ale jeste hodne co dodelavat... neco na otvirani souboru, nejak ty filtry... casem.

<?PHP
  
  if ( File_Exists ("log.log") && is_readable("log.log") ): 
   
  $pole_radku = explode("\n",file_get_contents("log.log"));
  for ($i = 5; $i < count($pole_radku)-1; $i++): 
  {
    $pole_bunek = explode(" ",$pole_radku[$i]); 
    for ($j = 0; $j < 17; $j++): 
    {
      $pole_tabulka[$i][$j] = $pole_bunek[$j];
    }
    endfor;  
  }
  endfor; 
  $pole_hlavicka = explode(" ",$pole_radku[3]);

?>
  
 
<html>

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
    <title>PHP - FireLog</title>
  </head>
  
  <body bgcolor="#FFFFFF" text="#000000">
            
  <table border="1" >
    <tr>
    <?PHP
  
      for ($j = 1; $j < 18; $j++): 
      {
        echo("<td>". $pole_hlavicka[$j] ."</td>");
      }
      endfor;  

    ?>
    </tr>
    <?PHP
  
      for ($i = 5; $i < count($pole_radku)-1; $i++): 
      {
        echo("<tr>");
        for ($j = 0; $j < 17; $j++): 
        {
          echo("<td>".$pole_tabulka[$i][$j]."</td>");
        }
        endfor;  
        echo("</tr>");
      }
      endfor; 
  
    ?> 
  </table>
  
  </body>
  
</html>

<?PHP
  else:
  echo ("soubor neexistuje");
  endif;
?>
Jirkasss
Profil *
Oprava: hezke vylepseni s pomoci kolegu :)

jeste mi bylo doporuceno pouzit for each, ale ja tam neprojizdim cela pole, a nevim jak to s foreach udelat...

<?PHP
  
  if ( File_Exists ("log.log") ) 
  {
    if (is_readable("log.log")) 
    {
      $pole_radku = explode("\n",file_get_contents("log.log"));
      for ($i = 5; $i < count($pole_radku)-1; $i++) 
      {
        $pole_bunek = explode(" ",$pole_radku[$i]); 
        for ($j = 0; $j < 17; $j++)
        {
          $pole_tabulka[$i][$j] = $pole_bunek[$j];
        }   
      }
      $pole_hlavicka = explode(" ",$pole_radku[3]);
    }
    else $chyby = "soubor je necitelny";
  }
  else $chyby = "soubor neexistuje";
?>
  
 
<html>

  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
    <title>PHP - FireLog</title>
  </head>
  
  <body bgcolor="#FFFFFF" text="#000000">
            
  <table border="1" >   
    <?PHP
      if (isset($chyby))
      {
        echo($chyby);
      }
      else
      {  
        echo("</tr>");
        
        for ($j = 1; $j < 18; $j++) 
        {
          echo("<td>". $pole_hlavicka[$j] ."</td>");
        }
        echo("</tr>");
  
        for ($i = 5; $i < count($pole_radku)-1; $i++) 
        {
          echo("<tr>");
          for ($j = 0; $j < 17; $j++)
          {
            echo("<td>".$pole_tabulka[$i][$j]."</td>");
          }
          echo("</tr>");
        }
                
      }
    ?> 
  </table>
  
  </body>
  
</html>

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: