Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pobieranie danych z innej strony
Forum PHP.pl > Forum > PHP
AxZx
witam,

chcę udostępnić w jednym serwisie trochę kodu html oraz pliki graficzne. w drugim chciałbym to pobierać (kilka razy dziennie) i wyświetlać. tylko żeby grafika była na tym drugim serwerze.

jak to zorganizować?
z kodem html nie ma problemu, ale co z obrazkami?
shine
nie bardzo zroumialem czy chcesz aby na drugim serwisie byly obrazki z pierwszego czyli tak naprawde linki do obrazkow z pierwszego serwisu - wtedy mozesz wycinac z kodu html odpowiednie sekcje kodu z img src i odpowiednio sklejac sciezke, a jesli chcesz pobierac grafiki do siebie, to

przeparsuj kod w poszukiwaniu znacznikow img z ich sciezka, jezeli bedzie mialo sciezke bezwzgledna to zapisz od razu ta sciezke do tablicy, a jezeli wzgledna doklej url z ktorym sie laczysz i wtedy wrzuc sobie do tymczasowej tablicy. Potem akis foreach i dla kazdego elementu(czyli url'a do grafiki) zrob file_get_contents do grafiki i juz. Dodatkowo bedziesz musial pewnie samemu tworzyc u siebie strukture katalogow taka jak na stronie z ktorej pobierasz wiec wyciagasz sciezke robisz explode na "/" i dla kazdej nazwy za pomoca np polecen powloki, jesli masz taka mozliwosc mkdir $katalog i potem cd $katalog i znowu mkdir az dojdziesz do konca. w ostatnim ogniwie cp sciezka pobraneg obrazka do sciezki katalogu
wookieb
Problem masz w tym jak kontrolować ilość pobrań danej grafiki czy poprostu jak ten ktoś ma to ściągnąć?
shine
  1. <?php
  2.  
  3. $zm = file_get_contents("http://www.wp.pl");
  4.  
  5. $txt = strip_tags($zm, '<img>');
  6. $rep = str_replace('<img src="', '____', $txt);
  7. $rep = str_replace('" ', '____', $rep);
  8.  
  9. $img = explode('____', $rep);
  10.  
  11. foreach($img as $key)
  12. {
  13.    if(strstr($key, '.jpg') || strstr($key, '.gif') || strstr($key, '.png'))
  14.    {
  15.  
  16.        if(strstr($key, 'src="'))
  17.        {
  18.            $key = str_replace('src="', '', $key);
  19.        }
  20.  
  21.        if($licz != 0)
  22.        {
  23.            $wyn[] = $key;
  24.        }
  25.  
  26.  
  27.        $licz++;
  28.    }
  29.  
  30. }
  31.  
  32. //print_r($wyn);
  33.  
  34. make_dirs($wyn);
  35.  
  36. $fp = fopen("html.html", "w");
  37.  
  38. fwrite($fp, $zm);
  39.  
  40. fclose($fp);
  41.  
  42. function make_dirs($array)
  43. {
  44.    foreach($array as $sciezka)
  45.    {
  46.        $exp = explode("/", $sciezka);
  47.  
  48.        foreach($exp as $dir)
  49.        {
  50.            if(!strstr($dir, '.'))
  51.            {
  52.                $path .= $dir;
  53.  
  54.                $path .= '/';
  55.            }
  56.            if(!file_exists($path))
  57.            {
  58.                mkdir("$path",0777,true);
  59.            }
  60.  
  61.        }
  62.  
  63.        $path = NULL;
  64.  
  65.        if(!strstr($sciezka, 'www.wp.pl'))
  66.        {
  67.            $plik = file_get_contents("http://www.wp.pl/" . $sciezka);
  68.  
  69.            $fp = fopen("$sciezka", "w");
  70.  
  71.            fwrite($fp, $plik);
  72.  
  73.            fclose($fp);
  74.  
  75.        }
  76.  
  77.        //echo $plik;
  78.  
  79.    }
  80. }
  81.  
  82. ?>
AxZx
Cytat(wookieb @ 10.03.2009, 08:49:01 ) *
Problem masz w tym jak kontrolować ilość pobrań danej grafiki czy poprostu jak ten ktoś ma to ściągnąć?


problem mam w tym, że na tym pierwszym mam limit transferu i dosyć szybko by się wyczerpał gdyby ten drugi zasysał z niego te obrazki. dlatego chce je przenieść na ten drugi, który ma nie ograniczony limit transferu.
wookieb
Nich drugi serwer pobiera poprostu obrazek nawet zwykłem file_get_contents, badz curlem i zawartosc zapisuje do pliku (file_put_contents)
AxZx
Cytat(shine @ 10.03.2009, 08:05:49 ) *
nie bardzo zroumialem czy chcesz aby na drugim serwisie byly obrazki z pierwszego czyli tak naprawde linki do obrazkow z pierwszego serwisu - wtedy mozesz wycinac z kodu html odpowiednie sekcje kodu z img src i odpowiednio sklejac sciezke, a jesli chcesz pobierac grafiki do siebie, to

przeparsuj kod w poszukiwaniu znacznikow img z ich sciezka, jezeli bedzie mialo sciezke bezwzgledna to zapisz od razu ta sciezke do tablicy, a jezeli wzgledna doklej url z ktorym sie laczysz i wtedy wrzuc sobie do tymczasowej tablicy. Potem akis foreach i dla kazdego elementu(czyli url'a do grafiki) zrob file_get_contents do grafiki i juz. Dodatkowo bedziesz musial pewnie samemu tworzyc u siebie strukture katalogow taka jak na stronie z ktorej pobierasz wiec wyciagasz sciezke robisz explode na "/" i dla kazdej nazwy za pomoca np polecen powloki, jesli masz taka mozliwosc mkdir $katalog i potem cd $katalog i znowu mkdir az dojdziesz do konca. w ostatnim ogniwie cp sciezka pobraneg obrazka do sciezki katalogu


w trym pierwszym serwisie mogę utworzyć dowolny kod html - więc mogę przygotować ścieżki dopasowane do tego drugiego:)
właśnie o coś takiego chodziło jak podałeś. wyciągnięcie nazw plików, skopiowanie z jednego na drugi i koniec.

na lokalnym udało się:)
zobaczymy jak to będzie w praktyce.
do podmiany ścieżki skorzystałem z biblioteki http://simplehtmldom.sourceforge.net/ zamiast ręcznie parsować html.
dziękuję za podpowiedzi.
a79rtur
ustaw sobie czesc adresu do obrazków w kazdym z serwisów jako zmienna np.

  1. <?php
  2. $img_server = 'http://images.mojhosting.pl/';
  3. ?>


i zmien kod na kazdym serwisie na np.

  1. <img src="<? echo $img_server ?>images/cos.gif"/>

czy cos w tym stylu, zalezy jakiego systemu szablonów uzywasz.
AxZx
Cytat(a79rtur @ 10.03.2009, 16:41:27 ) *
ustaw sobie czesc adresu do obrazków w kazdym z serwisów jako zmienna np.

  1. <?php
  2. $img_server = 'http://images.mojhosting.pl/';
  3. ?>


i zmien kod na kazdym serwisie na np.

  1. <img src="<? echo $img_server ?>images/cos.gif"/>

czy cos w tym stylu, zalezy jakiego systemu szablonów uzywasz.


dzięki:)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.