Arkistomatskua
Otathan huomioon, että tämä on yli 15 vuotta vanha artikkeli, joten sisältö ei ole välttämättä ihan ajan tasalla. Olin artikkelin kirjoittamishetkellä 21-vuotias.
Jälleen kerran googletin php-scriptiini ratkaisua, mutta en löytänyt – päätin siis koodata itse. En ole edelleenkään kovin kaksinen php:ssa, mutta pääsen usein aina määränpäähäni pienellä vaivalla. Tällä kertaa halusin koodata cachen leffasivuni postereille. Cachehan tässä tapauksessa tarkoittaa lyhesti sitä, että Movieposterdb.comin kuvat latautuvat palvelimelta Rollemaa.orgin palvelimelle ja jatkossa latautuvat Rollemaan palvelimelta, eivät Movieposterdb:n palvelimelta. Näin nopeutuu kansikuvien latautuminen ja paranee sivun toimivuus (sillä kyseinen tietokantasivusto tuppaa olemaan melko usein alhaalla).
Sitten itse koodiin. En tosiaan saanut googlesta mitään apua, sillä löysin aina vain monimutkaisempia cache-systeemejä. Tahdoin mahdollisimman simppelin, joten päätin koodata sellaisen itse. Leffasivulleni lisätään leffat imdb:n tietokantaa hyväksi käyttäen. Imdb:stä haetaan automaattisesti leffan nimi ja muut tiedot. Näin ollen myös kansitaiteet menevät elokuvan IMDbID:n mukaan (tuo 7-numeroinen luku jokaisen elokuvan linkissä). IMDb on muutenkin hyvä paikka elokuvien tietojen selaamiseen.
Muistathan, että muuttujat voivat olla millä nimellä tahansa. Minun muuttujieni nimet ovat yleensä aika hölmöjä. Koita olla välittämättä.
<?php
// Ensin määrätään paikallinen tiedosto. Leffaid on määritetty jo aiemmin.
$paikallinen_tiedosto = '/home/tunnus/public_html/leffahaku/poster-image-db/' .$leffaid[0]. '.jpg';
// Jos tiedosto on olemassa jo Rollemaan palvelimella, ei tehdä mitään.
if (file_exists($paikallinen_tiedosto)) {
echo '';
// Jos tiedostoa ei ole...
} else {
// Haetaan kuvascriptin osoite.
$urlipurli = file ('tähän osoite');
// Tässä kohtaa pilkoin kuvascriptin palasiksi, jotta sain sivulta javascriptin seasta posterin osoitteen (sivusto käyttää javascriptiä, kun eivät halua että ihmiset suoralinkittävät postereita sivuilleen). En julkaise koodia tässä, koska en tiedä onko oikein tehdä näin.
// pilkkomiskoodia...
}
// Määritetään kuvan lopullinen osoite, kun se on saatu pilkkomalla selville kuvascriptistä.
$kuvan_osoite = $tulos_ulos[0].'.jpg';
// Kopioidaan kuva etäpalvelimelta omalle palvelimelle.
copy($kuvan_osoite, $paikallinen_tiedosto);
}
// Ja vihdoin näytetään posteri omalta palvelimelta.
echo '<div class="movieposter"><img src="https://www.rollemaa.fi/leffahaku/poster-image-db/' .$leffaid[0]. '.jpg" alt="" /></div>';
?>
Sellaista koodailua tällä kertaa. Pyydän, ettet kommentoisi koodia, sillä tiedän että tämän saisi tehtyä paremmallakin tavalla. Ratkaisu on kuitenkin tarpeeksi toimiva ja nopea minulle.
Tomi
Tuohan on ihan riittävä ja tarpeeksi yksinkertainen. Samoin minä teen muidenkin kuva_hommien kanssa, esim thumbnaileja on turha tehdä uusiksi, mikäli tiedosto jo löytyy.
Periaatteessa tuo ei tarvitsisi elseä ollenkaan,
if( !file_exists(
…rolle
Tomi: Kiitos kommentista, ja vinkistä! Googlettamalla löytyi jotain ihmeellisiä ajastettuja cacheja, eli tiedostot tietyn väliajoin haetaan uusiksi. Minusta tämä on melko tyhmää ainakin tässä tapauksessa, sillä kuva on jo ensimmäisellä kerralla hyvä – turha sitä on lähteä uudestaan hakemaan. Tietty jos joskus tarvitsee kuvan ”päivittää” niin poistaa vain tiedoston omalta palvelimelta…