Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: php jak 'wyjść' przez proxy ?
Forum PHP.pl > Forum > PHP
Mario1973
Mam drobny skrypcik pobierający pliki graficzne z jakiegoś serwera przez : readfile (http://www.costam.com);

Chciałbym pobierać te pliki przez mój serwer proxy. Często zapytania są o te same pliki i mógłbym je ciągnąć z cache.

Jak (na co) zmienić to readfile, aby pobierac przez proxy ?




M

OK, zkurlałem to sobie :

curl_setopt($ch, CURLOPT_PROXY, 'xx.xx.xx.xx:8080' );


ale niestety mój proxy i tak tego nie cache-uje .....a chciałem keszować miniaturki stron z girafa.com - tak aby zmieścic się w darmowych 2000 wyswietleń dziennie.


M
seaquest
Możesz to rozwiązać inaczej. Pytaj po prostu swój serwer o miniaturkę. A na swoim serwerze sprawdzaj czy ją masz zcachowaną. Jeśli nie, ściągasz, tworzysz cache, zwracasz. Jeśli tak, zwracasz cache.
Mario1973
Czyli sugerujesz, żebym zrobił sobie cache .... ok, może jakoweś rozwiązania podobne widziałeś ?

Pytam o sugestie odnośnie zapis i póżniej odszukanie tego - jak to zrealizować. (nie jestem biegły w temacie. Jestem na etapie kodu maszynowego z Commodore 64, zatem dość archaiczne rozwiązania mi mogą przychodzić do głowy)



M
seaquest
Na serwerze "proxy" stawiasz serwer http i wywołujesz obrazek poprzez np.
http://serwer-proxy/proxy.php?obrazek=adres-strony-www

Plik proxy.php sprawdza czy taki obrazek ma ściągnięty, jak nie, to ściąga i zwraca. Jeśli tak - to po prostu zwraca.
Mario1973
Cytat(seaquest @ 27.12.2007, 23:27:13 ) *
Na serwerze "proxy" stawiasz serwer http i wywołujesz obrazek poprzez np.
http://serwer-proxy/proxy.php?obrazek=adres-strony-www

Plik proxy.php sprawdza czy taki obrazek ma ściągnięty, jak nie, to ściąga i zwraca. Jeśli tak - to po prostu zwraca.



Tak, to zupełnie rozumiem. Prędzej wątpliwość wzbudza użyte przez Ciebie "proxy.php" - to tylko przykładowa nazwa, czy konkretny istniejący skrypt.

Po pierwszym poście zrozumiałem, że sam mam sobie wydłubać swoje proxy, a niezbyt kumałem jak to rozwiązać raczej od strony sposobu 'spisu plików' i jego przeszukiwania . W końcu plików nie będzie wiele - ze 2000.

Przeraziła mnie za to ilość pobrań - już teraz jest ponad 4000 dziennie - pewnie wina robotów...... Serwerek i łącze to wyciągnie bez problemu - tylko kwestia, żeby to elegancko i wydajnie napisać...

M
seaquest
proxy.php to tylko przykładowa nazwa
Mario1973
Jak byś rozwiązał spis zawartości cache i sprawdzanie ?

Podaj tylko sugestie - metodę.

Spis robić w pliku i przeglądać go po prostu ? Czy może bez spisu, a przeglądać zawartość katalogu z plikami ?

M
seaquest
Możesz trzymać w bazie danych albo po prostu użyć file_exists, gdzie nazwa pliku to np md5 z adresu strony.
Mario1973
Cytat(seaquest @ 28.12.2007, 10:44:30 ) *
Możesz trzymać w bazie danych albo po prostu użyć file_exists, gdzie nazwa pliku to np md5 z adresu strony.



oooo podoba mi się to file_exists - z tym to wygląda na prostą sprawę. Czy widzisz jakieś zonki, czy jest to naprawdę bardzo proste ?

- odczytać zapytanie
- zrobić MD5 z adresu
- file_exists ? jeśli nie , to pobrać z girafy i zapisać
- wziąć plik z nazwą MD5

i wsio ?

aaa jak wdrożyć czyszczenie keszu co np 12 godzin, żeby uwzględniać zmiany w obrazkach - Jak ustalić upływ czasu ?

M
seaquest
md5(nazwa)_timestamp().jpg

timestamp() sprawdzasz przy odczytywaniu i jak jest za stary to kasujesz obrazek.
Mario1973
OK, dziękuję za bardzo pomocne odpowiedzi.

Na koniec jeszcze ostatnie pytanie, czy file_exists przy około 2000 plikach nie będzie jakoś szczególnie męczył serwera ? Czasochłonne to ?

M
seaquest
Nie, bo wykorzystuje indeks partycji na jakiej znajdują się pliki. Więc jeśli wybierzesz np reiserfs w linuxie to będzie śmigać.
Mario1973
Serdecznie dziękuję za pomoc w naprowadzaniu , skrypcik zrobiłem i działa poprawnie.

jeszcze wdrażam kasowanie, gdy plik jest starszy niż 1 dzień :

#jesli plik ma min 1 dzien to kasuj
if((time()-filemtime($filename))>86400)
unlink ($filename);

będzie OK ?

M
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.