Autor | Zpráva | ||
---|---|---|---|
Jirkasss Profil * |
#1 · Zasláno: 17. 4. 2011, 12:03:31
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 |
#2 · Zasláno: 17. 4. 2011, 15:17:00
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 * |
#3 · Zasláno: 17. 4. 2011, 17:11:35
Explode prave radky nedava, je to funkce specielne pro retezce, stim bych prave pracoval az bych nacetl ten radek :(
|
||
Keeehi Profil |
#4 · Zasláno: 17. 4. 2011, 17:16:49 · Upravil/a: Keeehi
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 |
#5 · Zasláno: 17. 4. 2011, 17:27:03
|
||
Jirkasss Profil * |
#6 · Zasláno: 17. 4. 2011, 19:44:01
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 |
#7 · Zasláno: 17. 4. 2011, 19:49:54
Pokud chceš obsah souboru rozsekaný do řádků, tak na to je funkce file().
|
||
Joker Profil |
#8 · Zasláno: 17. 4. 2011, 19:51:12
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 * |
#9 · Zasláno: 18. 4. 2011, 00:13:01
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> |
||
Časová prodleva: 13 let
|
0