Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: PHP ja cron probleema

Sivun loppuun

bugmaker [15.01.2009 20:57:15]

#

Tervehdys kaikille ohjelmointitaitoisille!

Olen puuhastellut hieman www-sivujen parissa, mutta oma kokemukseni PHP-kielestä on käytännössä nolla. Arvelen, että tältä foorumilta varmaankin löytyisi asiantuntemusta seuraavanlaisen pikku PHP-skriptin väsäämiseksi.

Käytän eräällä sivustolla rss-syötteiden www-julkaisemiseen feed2js-nimistä PHP-sovellusta. Olen saanut kaiken toimimaan hyvin, mutta pieni kauneusvirhe on jäänyt vaivaamaan. Feed2js muuttaa rss-syötteen javascript-muotoon. Javascript voidaan sitten liittää osaksi html-koodia, jolloin sivuille ilmestyy rss-syötteestä tuotettuja linkkejä.

Feed2js säilöö syötteen cache-välimuistiinsa, jonka päivitysvälin voi säätää haluamakseen. Ongelma on siinä, että skripti ei itse päivitä cachensa sisältöä, vaan cache päivitetään ymmärtääkseni seuraavasti:

- sivustolla kävijä klikkaa linkkiä, jolla rss-uutissivu avautuu
- sivun latautuessa javascript käy noutamassa uudet uutiset feed2js-ohjelmalta
- feed2js antaa javascriptille cachensa sisällön näytettäväksi ja "herää" hakemaan cacheensa uuden sisällön, jos asetettu aika on kulunut
- sivuston kävijä saa selaimeensa cachen vanhan sisällön ja tuumailee mielessään "kaksi päivää vanhoja uutisia - tänne en tule enää ikinä"
- seuraavalla klikkauksella cachessa olisikin jo uudet uutiset, mutta tarve saattaa olla jo ohi :(

Näitä ongelmia ei tietenkään ilmene, jos sivustolla on paljon käyttäjiä, mutta vähäisellä kävijämäärällä ongelmia on.

Ohjelmointitaitoinen voisi kehittää mitä hienoimpia ratkaisuja, mutta mielestäni seuraavanlainen quick-and-dirty-ratkaisu olisi riittävä:

Tarvittaisiin cronin avulla ajettava yksinkertainen PHP-skripti, joka "klikkailisi" linkkejä aina kun cron sitä potkaisisi. Tuolloin aina sivun latautuessa heräisi myös feed2js ja kävisi tarkistamassa onko feedi päivittynyt.

"Klikattavat" linkit voisivat olla suoraan PHP-koodin joukossa, koska niitä ei ole kovin monta. Olen siinä uskossa, että ellei PHP-sovellusta käynnistetä selaimella vaan cronilla, ohjelma tökkää siihen, että tulosta ei näytetä missään, ei ole selainta missä tulos näkyisi. Ohjataanko tulos johonkin nul-paikkaan??

Uskoakseni osaisin määritellä cron-asetukset, kun hieman paneutuisin, mutte en pane lainkaan pahakseni, jos joku voi esittää esimerkin.

Syvä respect kaikille, joilla on kiinnostusta esittää, miten PHP-skripti voisi toimia! Odottelen kiinnostuneena :)

kayttaja-2791 [15.01.2009 21:03:57]

#

Uskoisin että Feed2js hakee tiedot Ajaxilla, eli se tekee uuden sivukutsun jollekin (oletettavasti PHP-) skriptille. Eli riittääisi että aika-ajoin suoraan vain kutsuisit sitä PHP-skriptiä. Enpä nyt hirveämmin arvaile, mutta tuosta voisit otta selkoa.

Jos se todella toimii noin, riittää skriptiksi tälläinen:

<?php
file("http://tähänurlijostauutisethaetaan");
?>

bugmaker [15.01.2009 21:19:44]

#

Feed2js hakee uutiset Yahoo Pipes-palvelussa olevasta mashupista, joka sekin on rss-feedi.

Nettisivuilla on useita eri javascriptejä, joista kukin pyytää feed2js:ltä eri uutisia. Eli feed2js:n cachessa on useita eri syötteitä, jotka sitten aina sivua näytettäessä javascriptien avulla näytetään sivun sisällön osana.

Mielestäni skripti, joka pyytäisi sivun latausta olisi käypä. Mutta miten toimitaan silloin, kun cron käynnistää PHP-skriptin, eikä selain?

Blaze [15.01.2009 22:37:44]

#

Kelpaisko oman skriptin sijasta wget?

bugmaker [15.01.2009 23:16:05]

#

Näyttäisi tuo wget olevan joku etupäässä unixin softa, jolla voi imuroida esim. html-tiedostoja?

Ilmeisesti tuokin hoitaisi asian. Mutta - palvelin, jossa nettisivut pyörivät, ei ole oma, vaan atlantin takana. Voipi tulla ongelmia saada wget asennettua ja toimimaan. PHP-skriptien tiedän toimivan ongelmitta.

bugmaker [16.01.2009 01:19:45]

#

Nyt löysin tällaisen kapineen: cURL. Kokeilin yhtä PHP-esimerkkiskriptiä sivuilta: http://curl.haxx.se/libcurl/php/examples/

Se tuntuisi toimivan, eli hosting-palvelussani on cURL asennettuna. Mutta kun ei osaa koodata, niin ei osaa...

Mitä tällainen skripti tekee? Voisiko tästä kehittää haluamani?

<?php
//
// A very simple example that gets a HTTP page.
//

$ch = curl_init();

curl_setopt ($ch, CURLOPT_URL, "http://www.zend.com/");
curl_setopt ($ch, CURLOPT_HEADER, 0);

curl_exec ($ch);

curl_close ($ch);
?>

Voisiko siis tämän suorittaa cronin potkimana vaikka kerran tunnissa, niin että se lataisi halutun sivun > ei mihinkään. Sitten toistaisi saman muutamalle muulle sivulle?

kayttaja-2791 [16.01.2009 02:36:53]

#

Wget kyllä varmastikin löytyy oletuksena lähestulkoon jokaisesta modernista Linux/Unix/BSD/Solaris käyttiksestä... Voisin ainakin mutuilla näin.

Tuo edellämainitsemani esimerkkikoodi pitäisi toimia. Skriptin voit ajaa palvelimella käskyllä "php skripti.php".

bugmaker [16.01.2009 20:35:38]

#

Kiitos hyvistä vinkeistä. Uskoisin, että tuo wget hoitaa homman. Pitää vähän paneutua asiaan.

bugmaker [17.01.2009 18:47:37]

#

Terve taas!

Taas olen himpun verran viisaampi. PuTTYä olen oppinut hieman käyttämään ja ymmärrän, että pitäisi tehdä bash-skripti tuolle wgetille.

Varmaan on totuttuna tapana tehdä jokin yleinen hakemisto, jonne tällaiset skriptit laitetaan? Minne ja minkä niminen? Onko käyttöoikeuksien suhteen jotain, mitä pitäisi tietää?

bugmaker [18.01.2009 01:37:01]

#

Tässä tuntee olevansa aika noob, mutta tottahan se onkin :)

Nyt olen tehnyt shell scriptin, joka imuttaa tiedoston, jossa tuo javaskriptin pätkä on. Eihän se tietenkään virkistä syötettä... wget ei ilmeisesti toimi kuten selain, joka javascriptin ladatessaan alkaa imeä tietoa sen määrittelemästä paikasta.

Mutta ei hätiä mitiä, pikkuhiljaa tämä peelollekin selviää. Pitänee nähtävästi kiusata wgetillä nimenomaan sitä osoitetta, joka löytyy siitä javaskriptin pätkästä.

Eiköhän tämä tästä vielä!


Sivun alkuun

Vastaus

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

Tietoa sivustosta