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.
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ä.
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ä ...
Cronilla onnistuu, man cron
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...
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); ?>
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.
No jos php:n tulosteena on html:ää, niin sehän hoituu näin:
php /polku/skriptiin.php > tuotos.html
Aihe on jo aika vanha, joten et voi enää vastata siihen.