Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tekstitiedoston tyhjennys

Sivun loppuun

squid [01.12.2004 17:17:07]

#

Tein äsken kävijälaskurin, ja nyt minun tarvitsisi saada tiedot.txt tyhjäksi aina klo 0.00. Miten tämä tapahtuu? tässä tämä minun purkka viritys:

<?php


//tiedot mitä kerätään

$aika = date("d.m.Y - H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];
$tiedosto = file("tiedot.txt");
$tt = fopen("tiedot.txt", "a");

fwrite($tt, "$ip | $aika\n");

echo "Käyttäjiä näillä sivuilla on ollut " . count($tiedosto);

fclose($tt);

?>

odys [01.12.2004 17:26:13]

#

Jos käytössäsi on Crontabit niin käytä niitä, muuten katso tämä: https://www.ohjelmointiputka.net/koodivinkit/24055-php-ajastin-php-llä-miten

pistemies [01.12.2004 17:27:03]

#

Kellon aikaa tutkimalla...
Time-arvoja laskemalla...
Mutta...
Tuo ei onnistu ellei sivulla ole kävijää tasan klo. 0.00

Asia, jota haluat, järjestynee sillä, että kunkin vuorokauden ensimmäinen kävijä luo vuorokausi-tiedoston, esim, 01122004.txt, edelliseltä vuorokaudelta esim. näin:

$vrk=date(d)-1;
$aika=$vrk.date(mY).".txt";
if (!file_exists($aika))
{
copy("tiedot.txt",$aika);
}

(jos haluat säilyttää tiedot) ja tyhjentää tiedoston esim. näin:

$uusi=fopen("tiedot.txt","w");
fclose($uusi);

ja sen jälkeen tallentaa omat tietonsa siihen.

Metabolix [01.12.2004 17:31:40]

#

Tallenna tiedoston alkuun sen muokkauspäivämäärä. Aina kun muokkaat tiedostoa, tarkista, onko tuo päivämäärä sama kuin oikea päivämäärä. Jos se on eri, tiedosto on vanhentunut ja sen voi tyhjentää. Jos tuota tiedostoa ei lueta kuin PHP-skriptistä käsin, onko sillä merkitystä, tapahtuuko tyhjennys keskiyöllä vai ensimmäisellä käyttökerralla sen jälkeen?

Eikös tuo koodisi korvaa nyt joka kerta tiedoston vanhat tiedot uusilla niin, että käyttäjiä löytyy aina vain yksi? Pitäisi varmaan avata kirjoituksen (w) sijaan appendilla (a), jolloin jatkuu kirjoitus lopusta.

En ole nyt varma fwrite-funktion käytöksestä, mutta jos se ei "w"-parametrin kanssa tyhjennä tiedostoa, voi koko roskan poistaa unlink-funktiolla.

squid [01.12.2004 17:46:39]

#

Jatketaan nyt viellä tähän: Korvasin tuon "w"-parametrin "a":lla, mutta nyt tuli semmoinen ongelma, että pitäisi tarkistaa, löytyykö IP:tä tiedostosta, ja jos löytyy, ei kirjoiteta jne. Miten tämä tarkistus tapahtuu?

Heikki [01.12.2004 18:07:09]

#

Tässä yksinkertainen koodi joka etsii merkkijonoa tiedostosta (heitän päästä, voi jäädä jokin bugi). Oletetaan että sinulla on tiedostossa ip-osoitteet omilla riveillään tyyliin:
123.456.789
43.64.123.53
54.35.22.11

Jos riveillä on muutakin tietoa, täytyy vähän muokkailla.

<?php
$tiedosto="filu.txt"; //tutkittava filu
$etsitaan="81.197.56.65"; //tätä etsitään

$loyty=0; //1 jos löytyy
$rivit=file($tiedosto); //luetaan tiedosto taulukkoon
for ($i=0; i<count($rivit); i++) { //käydään taulkko läpi
   if ($rivit[$i]==$etsitaan) {
      echo "Löyty tiedostosta";
      $loyty=1;
      break;
   }
}

if ($loyty==1) {
   echo "Kyllä löytyy";
} else {
   echo "Ei löydy";
}

pistemies [01.12.2004 19:14:32]

#

Pikkuisen vielä:
Sinulla näkyy olevan Ip eka-lokerossa.
Tarkistetaan esim. näin:

<?php
$fp=file("tiedot.txt");
for($i=0;$i<count($fp);$i++)
{
  $solut=explode("|",$fp[$i]);

  // Tarkistetaan
  if($ip == $solut[0])
   {
   echo "Tervetuloa uudelleen sivuilleni!";
    }
    else
{
 $tiedosto = file("tiedot.txt");
 $tt = fopen("tiedot.txt", "a");

 fwrite($tt, "$ip | $aika\n");

  echo "Käyttäjiä näillä sivuilla on ollut " . count($tiedosto);

  fclose($tt);

  }
}
?>

Tuossa on varmasti pikkuisen säätöä, kun väänsin sen tässä ja nyt...

squid [01.12.2004 20:16:21]

#

Tässä on jokin virhe:

for ($i=0; i<count ($rivit) i++); { //käydään taulkko läpi

Tempfile [01.12.2004 20:24:10]

#

Sieltä puuttuu puolipilkku countin jälkeen. Saa sitä muuten edes yrittää korjata syntaksivirheitä ennen kuin postaa Putkaan niistä.

Draiz [01.12.2004 21:12:11]

#

Korjattuna

for ($i=0; $i <= count($rivit); i++); { //käydään taulukko läpi

Heikki [01.12.2004 21:47:08]

#

Juu, noinhan se tietysti menee. Huomaa että en ole paljon PHP:hen koskenut viimeaikoina, ja tuo dollarimerkki ei enään ole "selkäytimessä" vaan hommat sujuu C++:n syntaksilla :D

Draiz korjasi koodin oikeaksi, Pekan antamasta explode()-funktiosta löytyy tietoja esim. ohjelmointikielihakemistosta.

squid [01.12.2004 22:23:18]

#

Olenkohan sitten käsittänyt jotain väärin, koodi näyttää nyt tältä:

<?php


//tiedot mitä kerätään

$aika = date("d.m.Y - H:i:s");
$ip = $_SERVER['REMOTE_ADDR'];
$tiedosto = file("tiedot.txt");
$tt = fopen("tiedot.txt", "a");
$tiedosto = "tiedot.txt"; //tutkittava filu
$etsitaan = "$ip"; //tätä etsitään

$loyty = 0; //1 jos löytyy
$rivit = file($tiedosto); //luetaan tiedosto taulukkoon
for ($i=0; $i <= count($rivit); i++)
{ //käydään taulukko läpi

   if ($rivit[$i]==$etsitaan)
   {
      $loyty=1;
      break;
     }

}

fwrite($tt, "$ip | $aika\n");


echo "Käyttäjiä näillä sivuilla on ollut " . count($tiedosto) ."Kello on nyt $aika";

fclose($tt);

?>

tsuriga [01.12.2004 22:34:08]

#

EDIT: Tuota tuota, sieltä löytyy $ip|$aika\n jos kirjoitat sinne kuten mainitsit aiemmissa viesteissäsi.

<?php
// käydään taulukko (eli tiedoston rivit) läpi
for ($i=0; $i <= count($rivit); i++) {
  $rivi = explode("|", $rivit[$i]);
// tässäpä pähkinä, mitä $rivi-muuttuja sisältää
// kokeile vaikka print_r($rivi)
// ja siitä luultavasti huomaat, millainen if-lause täytyy muodostaa
// vinkkinä, että täytyy vertailla $rivi-muuttujan indeksiä etsittävään arvoon
  }
?>

Ja lisäksi count($tiedosto), katsopas mitä se $tiedosto sisältää. Se sisältää "tiedot.txt", oikea muuttuja olisi $rivit.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta