Autor | Zpráva | ||
---|---|---|---|
vacjos Profil * |
#1 · Zasláno: 22. 12. 2010, 15:02:12
Ahoj,
1) Potřeboval bych si na stránkách zprovoznit vlastní logy, nechce se mi je totiž u poskytovatele platit. Hledal jsem na netu a našel jen tento script a trochu si ho poupravil. Nefunguje mi v něm ale získání velikosti souboru ($size) - vždy mi to napíše 0. Nevíte proč a jak to napravit? Skript vkládám do každé z mých stránek vždy na začátek stránky přes <?php include("./logger.php"); ?> 2) Tento dotaz není pro mne zas tak moc důležitý, ale zajímalo by mě to: Můj skript loguje jen php stránky, do kterých je načten. Lze nějak udělat, aby se logovaly všechny soubory. Tedy i js, html, css, obrázky, chybové stránky... prostě vše, tak jak bych to dostal od poskytovatele, kdybych si to zaplatil? Nemám přístup ke konfiguraci apache. Jde to vůbec? logger.php: <?php $logfile = "./log/".date("y").date("n").".log"; if (file_exists($logfile)) {} else { $fp = fopen($logfile,"w"); fclose($fp); } $timezone = "+0200"; $lookup_size = true; $server_name = get_var( "SERVER_NAME", "-"); $document_root = "http://$server_name"; function write_to_log($str) { if($fd = @fopen($GLOBALS[ "logfile"], "a")) { fputs($fd, $str); fclose($fd); } } function get_var($name,$default) { if($var = getenv($name)) {return $var;} else {return $default;} } $remote_host = get_var( "REMOTE_ADDR", "-"); $hostname = gethostbyaddr($_SERVER['REMOTE_ADDR']); $remote_user = get_var( "REMOTE_USER", "-"); $remote_ident = get_var( "REMOTE_IDENT", "-"); $server_port = get_var( "SERVER_PORT", 80); if ($server_port != 80) {$server_port = ":" . $server_port;} else {$server_port = "";} $request_method = get_var( "REQUEST_METHOD", "GET"); $request_uri = get_var( "REQUEST_URI", ""); $user_agent = get_var( "HTTP_USER_AGENT", ""); $referer_url = (isset($_SERVER['HTTP_REFERER'])) ? $_SERVER['HTTP_REFERER'] : ""; if ($lookup_size == true && $document_root) { $filename = $request_uri; $filename = "$document_root$filename"; if (!$size = filesize($filename)) {$size = 0;} } else {$size = 0;} $date = gmdate( "d/M/Y:H:i:s"); $log = "$hostname $remote_host $remote_ident $remote_user [$date $timezone] \""."$request_method http://$server_name$server_port$request_uri\" 200 $size \"$referer_url\" \"$user_agent\"\n"; write_to_log($log); ?> |
||
Keeehi Profil |
#2 · Zasláno: 22. 12. 2010, 15:16:10
Řádek 36 je zbytečný. Ta podmínka na řádku 38 se mi moc nepozdává. Co tam bylo původně? Projde vůbec script přes podmínku na řádku 35?
|
||
vacjos Profil * |
#3 · Zasláno: 22. 12. 2010, 15:34:50
Zde je originál:
Odkaz |
||
vacjos Profil * |
#4 · Zasláno: 22. 12. 2010, 15:40:10
Záznam chybové stránky 404 jsem již provedl pře .htaccess vložením: ErrorDocument 404 /404notfound.php
a do stránky 404notfound.php jsem includoval můj logger.php s modifikací 200 na 404. Lze nějak zaznamenávat i jiné? |
||
Časová prodleva: 12 dní
|
|||
vacjos Profil * |
#5 · Zasláno: 3. 1. 2011, 11:35:31
Nevíte někdo jak zjistit velikost stahované stránky?
|
||
imploder Profil |
#6 · Zasláno: 3. 1. 2011, 14:35:53 · Upravil/a: imploder
vacjos:
„Nevíte někdo jak zjistit velikost stahované stránky?“ To nejde dokud není celá vytvořená. Musíš teda nejdřív vytvořit stránku, a až potom se dá zjistit, jak je velká. Dá se to udělat tak, že zavoláním ob_start (BTW ten warning tam se tvojeho skriptu asi zrovna týká) zapneš zápis do bufferu, ...normálně echuješ (nebude se to zapisovat na výstup rovnou, ale do bufferu)..., a až bude všechno hotové, tak zjistíš ob_get_length délku bufferu a ob_end_flush buffer vyprázdníš a vypneš (tím se všechno vypíše). Jde to dělat i po kouskách tak, že se délky jednotlivých kousků budou sčítat - to by ale zaneřáďovalo stránku, nedalo by se to dělat na jednom místě, takže lepší bude to udělat zapnutím bufferu úplně na začátku a zjištěním délky a vypnutím bufferu úplně na konci. Pokud má být zalogovaný každý přístup a logovat se bude až na konci provádění skriptu, je potřeba zapnout ignore_user_abort. Jinak by se nic nezalogovalo, pokud by během provádění skriptu uživatel zmáčkl tlačítko Zastavit (nebo <Esc>) a tím odpojil prohlížeč od serveru - skript by se tím zastavil. |
||
vacjos Profil * |
#7 · Zasláno: 3. 1. 2011, 16:31:00
Bezva:-)
A lze to nějak poupravit, aby to ukázalo nejen velikost zobrazené stránky (=textů ve zdrojáku) ale současně i velikost připojených souborů ke stránce (css,obrázků,js,..), které se načítají se stránkou? Díky |
||
imploder Profil |
#8 · Zasláno: 3. 1. 2011, 17:12:59 · Upravil/a: imploder
vacjos:
„A lze to nějak poupravit, aby to ukázalo nejen velikost zobrazené stránky (=textů ve zdrojáku) ale současně i velikost připojených souborů ke stránce (css,obrázků,js,..), které se načítají se stránkou?“ Připojené soubory se načítají z prohlížeče až po načtení stránky, na každý se vytváří samostatný HTTP požadavek. Něco z toho se nemusí načíst, např. když jsou v prohlížeči vypnuté obrázky, styly, JS, atd.. Takže velikost nejde přímo ve stránce spolehlivě spočítat. Je možnost, jak to řešit: načítat každý soubor PHP skriptem. Místo URL vedoucí přímo na soubor se použije URL skriptu, např.: <img src="obrazek.php?s=1"> Skript vypíše obrázek na výstup a zaloguje přitom údaje a velikost stejně jako u stránky (velikost může zjistit pomocí filesize() - tady je to jednodušší). Ukázka: /* skript obrazek.php */ // toto jsou soubory, které můžeme načíst $soubory = array( 1 => 'obr1.jpg', 2 => 'obr2.jpg', 3 => 'nejaka-fotka.jpg' ); // vybereme soubor podle parametru s if (isset($_GET['s']) && isset($soubory[$_GET['s']])) $s = $soubory[$_GET['s']]; else die(); // zalogujeme přístup (velikost zjistíme filesize($s)) zaloguj($s); // vypíšeme soubor na výstup header('Content-Type: image/jpeg'); // HTTP hlavička Content-Type - musí odpovídat typu souboru echo file_get_contents($s); |
||
Časová prodleva: 13 let
|
0