Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Jak NAJLEPIEJ pobierać zdjęcia z innych serwerów., Masowe pobieranie plików - która metoda lepsza?
Metoda pobierania plików z serwerów zewnętrznych.
Która lepsza?
copy() [ 1 ] ** [14.29%]
cURL [ 4 ] ** [57.14%]
inna [ 2 ] ** [28.57%]
Suma głosów: 7
Goście nie mogą głosować 
starcode
post 29.06.2011, 09:56:58
Post #1





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 18.06.2006

Ostrzeżenie: (0%)
-----


Witam!

Obecnie stoję przed problemem / zadniem pobierania dużej (a w sumie to bardzo dużej) ilości danych - mianowicie plików graficznych z innych serwerów.

Potrzebują zrealizować pobieranie zdjęć produktów z innych serwisów. Są to setki tysięcy plików graficznych do pobrania - oczywiście nie muszę ich pobrać hurtem wszystkich naraz. Pobieranie tych zdjęć to raczej nieskończony proces (starsze są usuwane, dodawane kolejne) - więc nigdy nie będzie tak, że wszystkie pliki będą pobrane.
Powiedzmy, że pliki będą pobierane w kolejności jakiejś tam (np. popularności).

Przechodzę do sedna sprawy. Mam adresy URL do owych plików graficznych. Dylemat przed, którym stoję to sposób pobierania plików. Dwie opcje jakie rozważam to funkcja PHP
oraz
  1. cURL
. W obu przypadkach po pobraniu pliku lokalnie - obrabiam i przetwarzam sobie plik.

Pytanie, która z opcji będzie bardziej wydajna? Może jest jakaś inna alternatywa?
Jest jakiś sposób, aby "nie zamulać serwera" - chodzi mi tutaj o czas oczekiwania na plik z serwera zewnętrznego.

Założyłem też rozwiązanie - aby pobierać pliki graficzne w momencie gdy są potrzebne - tj. użytkownik odwiedza stronę, na której są odnośniki do plików graficznych i dopiero wówczas są pobierane - jednakże generowanie takiej strony (za pierwszym razem) jest wówczas dość długie.
Drugim rozwiązaniem jest pobieranie zdjęć jako "robot".

Czekam na Wasze komentarze, propozycje.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
wookieb
post 29.06.2011, 10:13:52
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




curl_multi_init. Tylko asynchronicznie.


--------------------
Go to the top of the page
+Quote Post
erix
post 29.06.2011, 17:16:53
Post #3





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Drugim rozwiązaniem jest pobieranie zdjęć jako "robot".

A ja bym generował listę URL-i i odpalał
Kod
wget -i urls.txt

IMO wget się trochę lepiej do tego nadaje. [;


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
starcode
post 5.07.2011, 22:11:35
Post #4





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 18.06.2006

Ostrzeżenie: (0%)
-----


Wget jest rozwiązaniem, które wdrożyłem.

Pytanie tylko jest takie, czy w pliku z którego ma być pobierana lista URL'i można podać w jakiś sposób adres (nazwę docelową) pliku.

Przykładowo, mam w pliku adresy:
http://www.domena.pl/katalog1/1.jpg
http://www.domena.pl/katalog2/1.jpg
http://www.domena.pl/katalog3/1.jpg
http://www.domena.pl/katalog4/1.jpg

mimo, że wszystkie pliki są plikami różnymi zostaną zapisane jako pliki
1.jpg
1.jpg.1
1.jpg.2
1.jpg.3

Czy możliwe jest podanie np. nazwy docelowej w takim pliku:
przykładowo:
http://www.domena.pl/katalog1/1.jpg -o 1.jpg
http://www.domena.pl/katalog1/1.jpg -o 2.jpg

Ktoś ma jakieś doświadczenie w tym polu?
Go to the top of the page
+Quote Post
Crozin
post 5.07.2011, 22:22:14
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Zacznijmy od tego, że obie metody jakie podałeś, jak i metoda podana przez @erixa robią dokładnie to samo, tj. łączą się ze zdalnym serwerem i wykorzystując protokół HTTP pobierają z niego dane. Innymi słowy to wszystko to w rzeczywistości to samo - jedynie ubrane w inne API.

Utwórz sobie na zdalnym serwerze program / skrypt, który zbuduje jakieś archiwum TAR, ZIP czy jeszcze inne zawierające wszystkie potrzebne dane, tj. przykładowo listę wszystkich obrazów dodanych / usuniętych od czasu ostatniego żądania oraz same pliki graficzne. Później musisz już tylko takie archiwum pobrać, rozpakować i przetworzyć. Oszczędzisz sobie setek bezsensownych żądań HTTP.
Go to the top of the page
+Quote Post
starcode
post 6.07.2011, 09:30:52
Post #6





Grupa: Zarejestrowani
Postów: 28
Pomógł: 0
Dołączył: 18.06.2006

Ostrzeżenie: (0%)
-----


Cytat(Crozin @ 5.07.2011, 23:22:14 ) *
Zacznijmy od tego, że obie metody jakie podałeś, jak i metoda podana przez @erixa robią dokładnie to samo, tj. łączą się ze zdalnym serwerem i wykorzystując protokół HTTP pobierają z niego dane. Innymi słowy to wszystko to w rzeczywistości to samo - jedynie ubrane w inne API.

Utwórz sobie na zdalnym serwerze program / skrypt, który zbuduje jakieś archiwum TAR, ZIP czy jeszcze inne zawierające wszystkie potrzebne dane, tj. przykładowo listę wszystkich obrazów dodanych / usuniętych od czasu ostatniego żądania oraz same pliki graficzne. Później musisz już tylko takie archiwum pobrać, rozpakować i przetworzyć. Oszczędzisz sobie setek bezsensownych żądań HTTP.


Dzięki za odpowiedź. Jednakże nie mogę tego tak zrobić. Ponieważ nie z jednego serwera pobieram dane, a z kilku tysięcy różnych serwerów. Przedstawione rozwiązanie miałoby sens, gdybym pobierał pliki z jednego serwera i/lub z serwera do którego mam "dostęp" - tj. mam możliwość uruchomienia tam jakiś skryptów - a takiej możliwości nie mam.

Odświeżam pytane odnośnie wget - zmian nazw pobieranych plików.

Go to the top of the page
+Quote Post
by_ikar
post 6.07.2011, 10:25:15
Post #7





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Z tego co pamiętam manuala wget, nie ma on możliwości zmiany nazwy pliku który pobierasz. A zwłaszcza jak pobierasz wiele plików np poprzez wskazanie url do katalogu i pobieranie plików/katalogów rekurencyjnie. Nie mniej, opcja z jakimś prefixem byłaby całkiem fajna.

Ten post edytował by_ikar 6.07.2011, 10:26:01
Go to the top of the page
+Quote Post
gcdreak
post 7.07.2011, 21:49:29
Post #8





Grupa: Zarejestrowani
Postów: 365
Pomógł: 8
Dołączył: 16.12.2008

Ostrzeżenie: (0%)
-----


Możesz uruchomić w Bashu skrypt z pętlą, a w każdym jej przebiegu będziesz pobierał coś z serwera i wtedy użyjesz opcji -o nazwa
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 04:10