Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Sivun generointi tietyn ajan välein

Sivun loppuun

anju [28.08.2005 21:28:04]

#

Anteeksi heti alkuun että otsikko on suhteellisen huono, mutta toivottavasti tavoitan asiasta tietäviä.

Kerään linkkejä IRC-kanavan keskusteluista wurlgrab.pl -skriptin avulla (irssi). Skripti lyö MySQL-kantaan INSERT INTO -komennolla rivejä (url, kanava, nick, aika). Sitten PHP-skriptillä haen kannasta sinne kerätyt linkit ja tulostan ne nätiksi html-sivuksi. Ja koko hoito toimii Linuxin päällä.

Ongelmani on kuitenkin seuraava: linkkien määrä on suht suuri, joten en tahtoisi jatkuvilla kyselyillä rasittaa kantaa. Nyt ajattelinkin muuttaa ohjelmaa siten, että se suorittaisi em. kyselyn kantaan esimerkiksi 30min välein. Sitten php-skriptillä ajattelin tuottaa ne html-sivuksi.

Tähän loppuukin sitten ymmärrys ja tietämys. Perustiedot hallussa PHP:stä, MySQL:stä ja UNIXeista. Vinkkejä, apuja, linkkejä... Kaikki tervetulleita.

Kiitoksia etukäteen.

kayttaja-2791 [28.08.2005 21:53:18]

#

Teet kaiken samaan PHP tiedostoon seuraavasti:
Tallennat time() aikaleiman johonkin tiedostoon (tai vaikka tietokantaan) joka tarkistaa onko edellisestä päivityksestä mennyt jo haluttu aika. Mikäli on haetaan tiedot kannasta ja kirjoitetaan tietokantakyselyn tulokset temppitiedostoon (fopen moodissa w niin ei tarvitse edes erikseen tyhjentää sitä, muista myös flock). Jos taas päivitysväli ei ole vielä umpeutunut includetaan vain temppitiedoston sisältö.

Eli tämä on sikäli oikea rakenne että erillistä ajastinsovellusta ei tarvita toisin kuin generoitaessa vaikka .html sivu jota näytettäisiin kävijöille, eikä ylimääräisiä päivityksiä tehdä.

Metabolix [28.08.2005 21:58:56]

#

Eli ongelmasi on, minne tallettaa väliaikaisesti tuo linkkien paljous odottamaan tietokantaa? Kai voisit muokata tuota skriptiä niin, että se lisäisi kyseisen linkin tiedoston loppuun (vaikka kutsumalla echo (url) >> linkit.txt). Sitten jossakin vaiheessa siirrät nuo kaikki kantaan ja tyhjennät tiedoston. En sitten tiedä, millä tuota tilannetta kannattaa seurata. Itse varmaan määräisin tiedoston maksimikoon, jonka ylittyessä se tyhjennettäisiin. Tiedä sitten noista pl-skripteistä...
... Hidas minä ...

Blaze [28.08.2005 22:00:46]

#

Cronilla onnistuu, man cron

kayttaja-2791 [28.08.2005 22:01:11]

#

Metabolix, minä ainakin ymmärsin että hän ei halua rasittaa kantaa joka kerta tuota html sivua ladattaessa, vaan käyttää jotain tilapäistiedostoa joka sisältää html:n ja joka päivitettäisiin 30min välein...

Metabolix [28.08.2005 22:15:21]

#

Jaa, taisin tosiaan käsittää väärin. Ymmärsin, että linkkejä satelee IRCissä koko ajan, ja että niitä ei haluttaisi koko ajan laittaa kantaan :)

No tuossa tapauksessa suunnilleen näin:

<?
$aikatiedosto = "aikatiedosto.txt";
$sivutiedosto = "sivu.html";

// Luetaan aika
$aika = trim(file($aikatiedosto)[0]);

// Onko aika mennyt umpeen?
if ($aika - time() > 30 * 60)
{
  // Kokoa sivu tiedostoon $sivutiedosto
  // ...
  // Kirjoita muokkausaika
  $f = fopen($aikatiedosto, 'w');
  fwrite($f, time()."\n");
  fclose($f);
}

// Printataan sivu
$f = fopen($sivutiedosto, 'r');
fpassthru($f);
fclose($f);
?>

anju [29.08.2005 18:20:44]

#

Niin, siis ongelma ei ollut linkkien tallennus kantaan (Irssi+skripti) vaan tuon linkkisivun tulostaminen html-tiedostoksi. Se siis tällä hetkellä tekee kyselyn, jossa kaikki linkit haetaan kerralla.

Ajattelin, että jos sen saisi toteutettua siten, että kannasta haetaan kaikki linkit ja tallennetaan ne tiedostoon vaikkapa linkkeinä ja tuosta datasta sitten kursin html-dokumentin.

Miten saisin kyselyn tallennettua tekstitiedostoon? Homman voisin vaikka ajastaa crontabilla.

tkarkkainen [29.08.2005 18:27:20]

#

No jos php:n tulosteena on html:ää, niin sehän hoituu näin:

php /polku/skriptiin.php > tuotos.html


Sivun alkuun

Vastaus

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

Tietoa sivustosta