Dołącz do zespołu ekspertów! Backend lub Frontend Developer?

Sprawdź najnowsze oferty pracy naszego partnera - 8lines.io!

Jak cacheować obrazki pobierane z serwera?

HowTo  Założony przez  Raen.

Witam,
Mam problem z pobieranymi obrazkami z serwerów steam, chciałbym dodać im cacheowanie żeby nie pobierać ich co wejście na stronę bo jest ich 15 na stronie i zastanawiam się jak to zrobić, ktoś mógłby mnie jakoś nakierować? Dać jakiś przykład? Z góry dziękuję za odpowiedź :)
prosty skrypt który sprawdzi przed pobraniem obrazka czy istnieje on na Twoim serwerze www i sprawdzi jego date

jeśli nie spełni zdefiniowanych warunków można wykonać funkcje pobrania obrazka i zapisu go na serwerze www
(07.09.2015, 18:59)Supryk napisał(a): prosty skrypt który sprawdzi przed pobraniem obrazka czy istnieje on na Twoim serwerze www i sprawdzi jego date

jeśli nie spełni zdefiniowanych warunków można wykonać funkcje pobrania obrazka i zapisu go na serwerze www

Miałbyś jakieś gotowe rozwiązanie ewentualnie czy mógłbyś mi wytłumaczyć dokładniej? Jakich funkcji użyć itd.? Byłbym Ci wdzięczny :)
Gotowych rozwiązań nie ma, pomęcz się sam, pokaż jak wygląda Twój kod do pobierania tych obrazków
Używam steam api i następnie w pętli pobieram funkcją getAvatar dla wszystkich 15 graczy i tak pobrany avatar wyświetlam, nic z nim poza tym nie robię
pokaż kod
Zrobiłem niby cachowanie kierując się słowami Supryka, oto mój kod:
$avatar = getAvatar($row[0]);
        if (!file_exists($avatar)) {
                $file = file_get_contents($avatar);
                $data = date("m.d.y", filemtime($filename));
                $dir = 'cache/avatars/av_'. $miejsce .'_'. $data .'.jpg';
                $loc = file_put_contents($dir, $file);
                $avatar = $dir;
            } else {
                //$avatar = getAvatar($row[0]);
            }

teraz mam pytanie, czy takie coś ma sens? Jeśli nie to prosił bym o jakieś poprawki tak aby nabrało to sensu :) Dzięki wielkie :)
if(file_exists("nazwaa pliku avatara")&&(time()-"czas cachowania"<filemtime("nazwaa pliku avatara")))
{
// plik istnieje, czas nie jest wiekszy
    
$file file_get_contents($avatar);
}
else
{
    
// pobieranie i zapis avatara
    
$avatar getAvatar($row[0]);
    
$dir 'cache/avatars';
     
$loc file_put_contents($dir$avatar);


nie widząc calego kodu nie pomoge, ja tak nie potrafie, zasade widzisz
Całość wygląda tak:
$zapytanie = "SELECT * FROM `Gracze` ORDER BY Poziom DESC, Exp DESC Limit $limit OFFSET $offset";
    //echo $zapytanie;

    $wynik = mysql_query($zapytanie);
    $informacje = array();
    $miejsce = 1;
    while ( $row = mysql_fetch_row($wynik) )
    {
    $avatar = getAvatar($row[0]);
        if (!file_exists($avatar)) {
                $file = file_get_contents($avatar);
                $data = date("m.d.y", filemtime($filename));
                $dir = 'cache/avatars/av_'. $miejsce .'_'. $data .'.jpg';
                $loc = file_put_contents($dir, $file);
                $avatar = $dir;
            } else {
                //$avatar = getAvatar($row[0]);
            }
            
        $informacje[] = array(
            'Steam'=> $row[0],
            'Exp'=> $row[1],
            'Poziom'=> $row[2],
            'Punkty'=> $row[3],
            'Avatar'=> $avatar,
            'Nick'=> trim(htmlspecialchars(getName($row[0]), ENT_QUOTES | ENT_HTML5)),
            'Rank'=> $miejsce
        );
        
        $smarty -> assign('gracz', $informacje);
        $miejsce++;
    }

Później spróbuję z Twoim kodem jak to będzie wyglądać i czy będzie działać :) Tak czy siak wielkie dzięki :)
a co zwraca funkcja getAvatar()?

pokaż ją też, nadal dajesz mi wycinek bo nie wiem co wkladasz w tą funkcje
GetAvatar zwraca dokładnie to:
https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/95/9507f03ad46ddf009806a056dca31dc373b60940_medium.jpg
Bezpośredni link do avataru ze steam
(07.09.2015, 21:28)Supryk napisał(a): a co zwraca funkcja getAvatar()?

pokaż ją też, nadal dajesz mi wycinek bo nie wiem co wkladasz w tą funkcje

Dzięki serdeczne za zainteresowanie tematem, użyłem Twojego kodu i wszystko działa jak należy :) Jeszcze raz dzięki!
Obecnie wygląda to tak:
// Pobieram ścieżkę pliku i wyciągam nazwę obrazka
    $avatar = getAvatar($row[0]);
    $plik = basename($avatar);

    // Jeden dzień cache, 3600= 1 godz
    if(file_exists($plik)&&(time()-"3600"<filemtime($plik)))
    {
      // plik istnieje, czas nie jest wiekszy
      $file = file_get_contents(getAvatar($row[0]));
    }
    else
    {
      // pobieranie i zapis avatara
      $dir = 'cache/avatar/'. $plik;
      $file = file_get_contents(getAvatar($row[0]));
      file_put_contents($dir, $file);
      $avatar = $dir;
    }

Czas cache to godzina, nie wiem czy to odpowiedni czas ale chyba wystarczający :)
to raczej nie ma sensu bo mniemam iż

get avatar pobiera avatary ze steama, a ta funkcja jest nad warunkiem i wykonuje sie caly czas
Muszę pobrać avatar żeby sprawdzić nazwę pliku, może masz rację że to nie ma sensu...
Coś można na to poradzić?
A co Ci zwraca $row[0]?



Użytkownicy przeglądający ten wątek:

2 gości