Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usówanie starych wpisów gdy ich liczba przekracz 10
Forum PHP.pl > Forum > PHP
Mavestinus
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
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
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
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
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
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
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 winksmiley.jpg
Ale czy nikt nie jest mi w stanie pomóc w problemie dal którego właśnie powstał ten topic?? 8)
menic
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....... aaevil.gif
jono
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
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: ...
jono
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.