Mavestinus
2.07.2003, 13:32:26
Próbuję napisać skrypt który zapisuje informacje o odwiedzających (ip, host, data i godzina). Sam zapis mi wychodzi ale chciałem to rozszeżyć o automatyczne usuwanie najstarszych wpisów jeśli jest ich więcej niż 10.
Na razie napisałem coś takiego:
index.php[php:1:eb8b1c18e7]<?php
$ip=$_SERVER['REMOTE_ADDR'];
$host=gethostbyaddr($ip);
$data=date("d-m-Y");
$godzina=date("H:i:s");
$open=fopen("ip.dat", "a");
$save="$ip||$host||$data||$godzina rn";
fputs($open, $save);
fclose($open);
?>[/php:1:eb8b1c18e7]
ip.php[php:1:eb8b1c18e7]<?php
$table=file("ip.dat");
$table=array_reverse($table);
$all=count($table);
for($p=$all; $p>9; $p--)
{
unset($table[$p]);
for($n=0;$n<count($table);$n++)
{
$table[$n]=chop($table[$n]);
}
$cale=implode("rn",$table);
$open=fopen("ip.dat", "w");
fwrite($open,chop($cale));
fclose($open);
}
for($i=0; $i<$all; $i++)
{
$ip=explode("||", "$table[$i]");
print("IP: <b>$ip[0]</b> Host: <b>$ip[1]</b> Data: <b>$ip[2]</b> Godzina: <b>$ip[3]</b><BR>");
}
?>[/php:1:eb8b1c18e7]Ale to się sypie.... Może mi ktoś pomóc??
Mnichasso
2.07.2003, 13:35:28
Niech mu ktoś pomoże bo mi by sie też takie coś przydało, lub żeby można było wybrane przezemnie wpisy usuwać.
Mavestinus
2.07.2003, 13:42:31
Do usówania wybranych wpisów zastsuj coś takiego:
$usun = id linijki wpisu ktory chcesz usunąć
dane.inc = plik w ktorym trzymasz te informacje
I teraz:[php:1:3fe4c8f772]<?php
$table=file("dane.inc");
unset($table[$usun]);
for($n=0;$n<count($table);$n++)
{
$table[$n]=chop($table[$n]);
}
$cale=implode("rn",$table);
$open=fopen("dane.inc", "w");
fwrite($open,chop($cale));
fclose($open);
?>[/php:1:3fe4c8f772]
Mnichasso
2.07.2003, 13:53:34
W którym miejscu dać :
$usun = id linijki wpisu ktory chcesz usunąć
dane.inc = plik w ktorym trzymasz te informacje
Zaraz po znaczniku <? :?: :?: [/b]
?>[/php]
Mavestinus
2.07.2003, 14:07:11
Nie ja to w moim systemie newsów robie tak:
delete.php[php:1:29ca99f419]<?php
$tabela=file("dane.inc"); // Zamienia zawartosc pliku dane.inc na tablice
$table=array_reverse($tabela);
for($i=0; $i<count($table); $i++) // Dopuki sa newsy wyswietla je
{
$dane=explode ("||", $table[$i]); // Rozdziela kazdy news znakami ||
// POCZTAEK - Wyswietlanie newsa
print("<b>.: $dane[0] :.</b><small> $dane[1] $dane[2]</small>");
print("<br>");
print("$dane[3]");
print("<br>");
print("<small>Posted by... <a href=mailto:$dane[4]>$dane[5]</a></small>");
print("<br>");
print("News numer $i --- <a href=del.php?usun=$i>Usuń News</a>");
print("<br>");
print("<br>");
// KONIEC - Wyswietlanie newsa
}
?>[/php:1:29ca99f419]I jak widać z tego kodu przeslyła zmienną $usun do pliku del.php a tam już to obrabiasz tak jak wyżej. Aha Sorry za komentarze ale teraz nie mam czasu żeby je usówać a cały skrypt mam okomentowany!
Ale dalej czekam na odpowiedź na moje 1 pytanie - jak zrobić automatyczne usówanie powyżej 10 wpisów
dragossani
2.07.2003, 14:58:17
Akurat komentarze w kodzie są raczej sprawą chwalebną, a nie wstydliwą. Gdyby tak wszyscy komentowali kod, żyłoby się łatwiej.
"Life would be much easier if I had the source code." :wink:
Mavestinus
2.07.2003, 15:30:22
Cytat
Akurat komentarze w kodzie są raczej sprawą chwalebną, a nie wstydliwą. Gdyby tak wszyscy komentowali kod, żyłoby się łatwiej.
"Life would be much easier if I had the source code." :wink:
Aha to ok
Ale czy nikt nie jest mi w stanie pomóc w problemie dal którego właśnie powstał ten topic?? 8)
menic
2.07.2003, 16:59:59
Cytat
Akurat komentarze w kodzie są raczej sprawą chwalebną, a nie wstydliwą. Gdyby tak wszyscy komentowali kod, żyłoby się łatwiej.
"Life would be much easier if I had the source code." :wink:
Ale nie do przesady.......
Banał.[php:1:60254cf9b8]<?php
//najpierw wczytujesz plik do tablicy
$dane = file("dane.txt");
//teraz kasujesz plik (najprościej tak)
unlink("dane.txt");
//teraz masz dane tylko w tablicy
foreach($dane as $id => $tresc){
//zapisujesz je z powrotem do pliku
$fp = fopen("dane.txt", "a");
fputs($fp, $tresc);
fclose($fp);
//jak dochodzisz do 10 linii wyskakuje polecenie break.
if($id == 10){break;}
}
?>[/php:1:60254cf9b8]
Ta metoda jest dobra, jeżeli chcesz rzeczywiście tylko 10 wpisów. Przy wiekszej ilości zbyt obciążające.
Mavestinus
2.07.2003, 20:34:27
No dobra jakoś to działa (nawet bardzo dobrze 8) ). Ale ja chce zostawić 10 najnowszych (czyli ostatnich 10 od dołu), a ten numer z array_reverse nie przechodzi :cry: ...
no tak.. to źle robisz od początku..
trzeba zapisywać nowe wpisy na samej górze.
[php:1:7f3552eb3d]<?php
//wyciągasz dane z pliku
$kolejnosc = file("test.txt", "a");
$raport = "Najnowszy wpisrn";
//kasujesz plik
@unlink("test.txt");
//tworzysz plik i wsadzasz najnowszy wpis
$fp = fopen("test.txt", "a");
fputs($fp, $raport);
fclose($fp);
//teraz wsadzasz resztę z powrotem do pliku
foreach($kolejnosc as $news){
$fp = fopen("test.txt", "a");
fputs($fp, $news);
fclose($fp);}
?>[/php:1:7f3552eb3d]
I w ten sposób najnowszy wpis będzie zawsze na samej górze, a co za tym idzie kasowanie będzie poprawne. Tylko z nowu to ma zastosowanie do niewielkich obciążeń.
spenalzo
2.07.2003, 21:47:35
A nie krócej?
[php:1:cf25096d54]<?php
//wyciągasz dane z pliku
$kolejnosc = file("test.txt", "a");
$raport = "Najnowszy wpisrn";
//tworzysz plik i wsadzasz najnowszy wpis oraz resztę wpisów
$fp = fopen("test.txt", "w");
fputs($fp, $raport);
fputs($fp,implode("",$kolejnosc));
fclose($fp);
?>[/php:1:cf25096d54]
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.