↑↓ liiku Enter avaa Esc sulje Satunnainen kirjoitus

Yksinkertainen kuvacache leffasivulle

1 min
280 sanaa

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.

Keskustelu

Ei vielä kommentteja

  1. 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(…

    1. 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…

Kukaan ei ole vielä sanonut mitään. Aloita keskustelu Mastodonissa tai siellä, missä kirjoitus on jaettu.

Osallistu keskusteluun

Keskustelu käydään somessa. Julkiset kommentit Blueskysta, Threadsista ja Mastodonista tuodaan tämän artikkelin kylkeen automaattisesti. Voit vastata kirjoitukseen suoraan omalta Mastodon-tililtäsi tai miltä tahansa fediversumin palvelimelta:

  1. Kopioi kirjoituksen osoite
  2. Liitä osoite oman palvelimesi hakuun

    Haku löytää kirjoituksen, ja voit vastata siihen kuten mihin tahansa julkaisuun.

  3. Rolle Mastodonissa

    @[email protected]

Jaa ja keskustele

Kun kirjoitus jaetaan Mastodonissa, Blueskyssa tai Threadsissa, jakoon tulleet vastaukset ja lainaukset kopioituvat tänne viestiketjuineen. Keskustelu näkyy täällä yleensä vartin sisällä.