Autor | Zpráva | ||
---|---|---|---|
Baterie Profil |
#1 · Zasláno: 25. 3. 2013, 08:04:28
Dobrý den, měl bych jeden dotaz. Dělám skript, který dokáže zapsat příkaz do konzole. Bohužel není možné, získat výstup z konzole. Konzole má ale i log, ze kterého by se to dalo dostat. Já se ptám, jak dynamicky vypisovat posledních pár řádků logu do okna, jako výstup konzole. Jednoduše řečeno, jak vypsat například 20 posledních řádků ze souboru tak, aby se například každou vteřinu aktualizoval.
Předem díky za pomoc |
||
Virtus Profil |
Samozřejmě že výstup z konzole jde získat:
exec('echo "test" > souborVystupu'); // a výstup z konzole mám v souboru: souborVystupu, takhle se ale obsah souboru celý přepíše novým textem exec('echo "test2" >> souborVystupu'); //takhle se do souboru jenom přidá další záznam, obsah se nepřepisuje //pokud bych to chtěl pustit asynchroně použiju konstrukci s nohup exec('nohup php ./myScript.php param1 param2 paramN'); // asynchroně spustí php script, který mi pak může zapisovat přes konzoli někam do souboru //a tady danej soubor můžu kontrolovat while(true){ //nějaká kontrola, jestli už v souboru mám to co potřebuju //nebo spracování souboru souborVystupu, ze kterýho budu vypisovat posledních 20 řádků sleep(5); } system('nohup php ./myScript.php param1 param2 paramN & echo $!', $PID); // tohle vám vrátí ID procesu, takže script dokonce můžete kontrolovat ještě třeba takhle |
||
Baterie Profil |
#3 · Zasláno: 25. 3. 2013, 10:53:02
ano, ale já potřebuju výstup konzole Minecraft serveru (java) :) špatně jste to pochopil. Potřebuju pouze skript, který ze souboru server.log vytáhne každou vteřinu poslední dva řádky. Bohužel na internetu jsem nic nenašel.
|
||
juriad Profil |
#4 · Zasláno: 25. 3. 2013, 11:11:03 · Upravil/a: juriad
http://stackoverflow.com/questions/1062716/php-returning-the-last-line-in-a-file
jde to dokonce elegantněji, pokud chceš vypisovat vše, co se do logu zapíše, tak můžeš ajaxem se ptát na "obsah souboru od poslední pozice do konce" funkcí fopen otevřeš soubor, pomocí fseek přejdeš na pozici, kde jsi minule skončil a budeš číst freadem do konce, na konci si ftellem zjistíš aktuální pozici a tu pošleš splolu s daty na klienta (a budeš ji předávat následujícímu requestu) ukázka implementace v php-tail http://code.google.com/p/php-tail/source/browse/trunk/PHPTail.php |
||
Baterie Profil |
#5 · Zasláno: 25. 3. 2013, 12:01:34
ježíš to je na mně nějaký složitý:) asi byste mi nemohl tento skript navrhnout.. prosím, hrozně mi ulehčite práci, já bych v tom ležel celý den
|
||
juriad Profil |
#6 · Zasláno: 25. 3. 2013, 13:12:51
Zkus pohledat na webu: "php tail", existují už nějaké hotové (například odkázaný http://code.google.com/p/php-tail/), ale většinou se jedná o celou stránku. Pokud by ti ovšem nevadilo mít výpis logu v iframe, tak máš vyřešeno. (Ukázka použití je v souboru Log.php)
|
||
Baterie Profil |
#7 · Zasláno: 25. 3. 2013, 17:11:40
Ten skript nefunguje :(
|
||
Baterie Profil |
#8 · Zasláno: 25. 3. 2013, 20:02:35
Použil jsem tento skript, ale funguje pouze pro lokální soubory :( Já potřebuju číst z toho souboru ve vzdáleném FTP :(:(
<?php // full path to text file define("TEXT_FILE", "ftp://xxxxx:xxxxxxxxxxxxxxxxxxxxxxxxx@93.91.250.122/server.log"); // number of lines to read from the end of file define("LINES_COUNT", 10); function read_file($file, $lines) { //global $fsize; $handle = fopen($file, "r"); $linecounter = $lines; $pos = -2; $beginning = false; $text = array(); while ($linecounter > 0) { $t = " "; while ($t != "\n") { if(fseek($handle, $pos, SEEK_END) == -1) { $beginning = true; break; } $t = fgetc($handle); $pos --; } $linecounter --; if ($beginning) { rewind($handle); } $text[$lines-$linecounter-1] = fgets($handle); if ($beginning) break; } fclose ($handle); return array_reverse($text); } $lines = read_file(TEXT_FILE, LINES_COUNT); foreach ($lines as $line) { echo "$line<br>"; } ?> |
||
Časová prodleva: 13 let
|
0