imagecreatefromjpeg błąd wczytywania obrazka

0

Witam

Mam spory problem i potrzebuję pilnie pomocy...

Mam na stronie taki skrypt, że wyświetlam na stronie zdjęcia ze zdalnego serwera czyli np. <img src="http://zdalny.serwer.com/obrazek.jpg" /> i ten obrazek wyświetla się prawidłowo. W związku z działaniem skryptu wykonuję operacje zmiany tego obrazka i tak pomijając szczegóły dochodzę do momentu kiedy wywołuję iimagecreatefromjpeg("http://zdalny.serwer.com/obrazek.jpg") i otrzymuję komunikat błędu:
PHP Warning: imagecreatefromjpeg(http://zdalny.serwer.com/obrazek.jpg): failed to open stream: Connection timed out in /var/www/vhosts/mojadomena.pl/httpdocs/t.php on line 8

To samo wywołanie dla obrazka ale już lokalnie działa prawidłowo, tak samo zresztą jak próba utworzenia obrazka z innego serwera niż ten wskazany wyżej czyli np: http://zdalny.serwer2222.com/obrazek.jpg
Ważnym elementem jest to, że na tej stronie niczego nie zmieniałem i to rozwiązanie działało bez problemu i zawsze prawidłowo. Dzisiaj po południu zaczęły pojawiać się te błędy. Nie wiem co jest grane, ponieważ sam url obrazka jest prawidłowy, jest on prawidłowo wyświetlany, funkcje zdalnego odczytu nie są zablokowane, a strona stoi na serwerze dedykowanym i nikt nie zmieniał bez mojej wiedzy żadnych ustawień.

Proszę o pomoc bo strona nie działa przez to prawidłowo.

0

Twój serwer dostał bana. Zapewne zbyt często pobierałeś ten obrazek i się właściciel serwera, z którego go pobierałeś zirytował. Skoro to dedyk to spróbuj wget-em pobrać ten obrazek, ale raczej nie ruszy.

0
dzek69 napisał(a):

Twój serwer dostał bana. Zapewne zbyt często pobierałeś ten obrazek i się właściciel serwera, z którego go pobierałeś zirytował. Skoro to dedyk to spróbuj wget-em pobrać ten obrazek, ale raczej nie ruszy.

Dzięki za odpowiedź. Może coś jest na rzeczy, ponieważ rzeczywiście zanotowałem wczoraj znaczący wzrost wejść na stronę, ale nie był to żaden atak. Z drugiej strony wyświetlenie obrazka poprzez tag "img ... " działało bezproblemowo, a jedynie funkcja imagecreatefromjpeg się wykładała. I muszę dodać, że serwer zdalny komercyjnie udostępnia pliki, mam wykupiony dostęp i posiadam limit odwołań, którego nie przekroczyłem.

0

Zapomniałem jeszcze dodać, że mniej więcej 30 minut po północy wszystko wróciło do normy bez żadnych działań z mojej strony. Mimo wszystko dalej chciałbym wyjaśnić sytuację ponieważ przez kilka godzin strona nie działała prawidłowo co jest dużym problemem, że nie wspomnę o stratach finansowych :/
Dodatkowe pytanie: czy pobranie tego samego obrazka poprzez wyświetlenie go na stronie w tagu "img" różni się jakoś od pobrania go poprzez funkcję imagecreatefromjpeg. Może jakieś urządzenie (np. router) po drodze pomiędzy moim serwerem a zdalnym blokowało te wywołania przez imagecreatefromjpeg, co było związane ze znacznym wzrostem ruchu (ok. 800%)??? Nie wiem czy tak mogło być, że selektywnie były blokowane wywołania?

Proszę o opinie i pomoc.

0

tag img działa po stronie klienta, więc jest zupełnie bezpieczny (odporny na bana).

1
Muciek napisał(a):

tag img działa po stronie klienta, więc jest zupełnie bezpieczny (odporny na bana).

Czyli jeżeli tak jest to obrazki na stronie będą się wyświetlały ale już próba ich odczytu z poziomu funkcji php może zostać zablokowana, dobrze zrozumiałem?

1

Muciek gada ciut od rzeczy, równie dobrze można zbanować IP przeglądających. Tyle, że mając 800 przeglądających - masz 800 odwołań do obrazka z różnych IP - to nie jest powód, żeby banować kogokolwiek, zresztą nawet nie ma jak tego powiązać ze sobą (dopóki link nie jest jakiś unikalny). Pobierając serwerem obrazek 800 razy - jest to 800 pobrań z jednego IP + jest wyraźnie widoczne, że nie jest to przeglądarka, a bot (inne nagłówki - ale można "zasymulować" przeglądarkę jak najbardziej (wszak przeglądarka robi to samo - pobiera plik).

A Ty mateo88 - musisz za każdym razem od nowa pobierać ten obrazek? zakładam, że są tam jakieś okresowo aktualizowane dane, ale pobierając plik raz na 5 minut chyba nic się złego z funkcjonalnością Twojej strony nie stanie?

Prosta funkcja:

function file_get_contents_cached($path, $interval=3600, $return_temp_path=false) { // domyślnie - godzina
  $num = $time - $time % $interval;
  $filename = md5($path).'_'.$num.'.cache';
  $file = 'cache/'.$filename;
  if (@file_exists($filename)) {
    if ($return_temp_path) { return $filename; }
    else { return @file_get_contents($filename); }
  }
  else {
    $contents = @file_get_contents($path);
    @file_put_contents($filename,$contents);
    if ($return_temp_path) { return $filename; }
    else { return $contents; }
  }
}

Użyj tego, żeby pobierać podany URL, ale nie częściej niż $interval sekund. Użyj $return_temp_path, żeby zwrócić tylko ścieżkę do pliku cache (do imagecreatefromjpeg Ci się przyda). O okresowe czyszczenie folderu cache zadbaj sam ;)

Edit: nietestowane, pisane na szybko, może nie zadziałać ;P

0
dzek69 napisał(a):

Użyj tego, żeby pobierać podany URL, ale nie częściej niż $interval sekund.

Z tego co widzę cache'owany jest tylko url do tego obrazka? Jeżeli tak to niestety mi się to nie przyda, ponieważ nie mam problemu z pobraniem url'a do pliku, a jedynie mam problem z pobraniem samego pliku. A tak na marginesie to url'e i tak cache'uje :) Url jest prawidłowy, zresztą wyświetlenie obrazka na stronie poprzez tag img nie stanowi problemu, plik jest fizycznie dostępny, jedynie nie mogę się do niego dobrać przez funkcje php.

0

Podałem Ci kod źródłowy, chyba możesz przeanalizować co w nim zawarłem? I w ogóle jak można cachować sam URL i ogólnie nie rozumiem Twojego pytania. To inaczej, bez "skrótów myślowych":

Użyj tego, żeby pobierać plik spod podanego URL, ale nie częściej niż $interval sekund.

0
dzek69 napisał(a):

Podałem Ci kod źródłowy, chyba możesz przeanalizować co w nim zawarłem? I w ogóle jak można cachować sam URL i ogólnie nie rozumiem Twojego pytania. To inaczej, bez "skrótów myślowych":

Użyj tego, żeby pobierać plik spod podanego URL, ale nie częściej niż $interval sekund.

W takim razie przepraszam. Nie przeanalizowałem dokładnie Twojego kodu. Spróbuję skorzystać z Twojego rozwiązania. A co do cache'owania urli to mechanizm jest taki, że otrzymuję ten url razem z innymi danymi tego pliku w odpowiedzi na moje zapytanie (API) do tego serwera. Więc otrzymany wynik odpowiedzi cache'uje przez x czasu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1