Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie czy dany plik/strona istnieje
Forum PHP.pl > Forum > PHP
alex011251
Mam na forum przykladowo link do flasha, grafiki itp ktore ma sie wyswietlac w poscie
Jak sprawdzic czy np dana grafika swf,url istnieje?
W przypadku grafiki na poczatku rozwiazalem to jak nizej. Ale problem jest taki iz pobiera mi cala grafike po czym sprawdza czy istnieje a przy wiekszej aplikacji nie mozna sobie pozwolic na tracenie zasobow
Gdyby byla mozliwosc rozpoznac po 1bajcie to juz by bylo super. Na poczatku myslalem by zrobic to jakos naglowkami. Ale je sie da zmodyfikowac . Pomyslow juz mi brak

  1. <?php
  2. $external_link = 'http://ks3291483.kimsufi.com/allegro/szablon2/images/banner2.jpg';
  3. if (@GetImageSize($external_link)) {
  4. echo '<img src="'.$external_link.'" />';
  5. } else {
  6. echo "nic tam nie ma :(";
  7. }
  8.  
  9.  
  10. ?>
  11.  
  12.  

StrefaPi
inaczej niż nagłówkiem nie sprawdzisz
  1. $url = "http://ks3291483.kimsufi.com/allegro/szablon2/images/banner2.jpg";
  2.  
  3. $handle = curl_init($url);
  4. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($handle, CURLOPT_NOBODY, true);
  6. curl_exec($handle);
  7.  
  8. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  9. if($httpCode == 200) {
  10. echo("<img src=\"".$external_link."\" />");
  11. }
  12. else {
  13. echo("nic tam nie ma :(");
  14. }
  15.  
  16. curl_close($handle);
alegorn
duplikujesz posty.
odpisalem ci we wczesniejszym

StrefaPi:: do sprawdzania naglowkow jest osobna funkcja get_headers, nie ma potrzeby cURL'a zaprzęgać.

j.
alex011251
Wlasnie zalozylem ten post bo tamten ma teraz mniej wspolnego z obecnym smile.gif A ty bardziej tamten miesza tylko w forum..

Nie ma sensu zaprzegac curla?

Ja jestem za to zdanie iz jest sens.

Get_headers wystarczy spreparowac naglowek i po ptokach. OpenImageSize pobiera caly obrazek i nie sprawdzi mi np obiektu flash.
Najlepszym chyba rozwiazaniem jest wlasnie CURL
StrefaPi
podobno curl jest szybszy :P
alegorn
w get_headers spreparujesz nagłówki powiadasz...
i odwołanie się do tych samych nagłówków przez cURL jest na to lekarstwem... ?
nie skomentuje..


co do prędkości - musiałbym sprawdzić, zresztą to tez zależy od ustawień cURL'a bo tam możesz wysterować czas oczekiwania, jak i automatyczne przejście do przekierowania... czyli innego adresu.
oczywiście, to zależy od konfiguracji biblioteki.. czyli czegoś na co nie zawsze mamy wpływ..

zresztą.. jak się uprzeć, to przecież można i jeszcze dziesięć innych sposobów wymyślić...

edit:: to już nie należało do tego tematu
StrefaPi
z tego co czytałem w kilku miejscach (przy standardowej konfiguracji) podobno curl jest "prawie" 2 razy szybszy i zużywający minimalnie mniej pamięci... /ale sam tego nie sprawdziłem/

alegorn ma rację i nie ma rady na preparowanie nagłówka
alex011251


chodzilo mi tylko by zabezpieczyc sie przed tym co wam wyskoczylo.
Do tego jes potrzebny filtr przed i filtr w czasie rzeczywistym.
Cos szybkiego i co najwazniejsze co nie pozera zasobow.
StrefaPi
otrzymałeś rozwiązanie... czy to taką funkcją czy inną - sprawdź które działa bardziej ekonomicznie, i tyle...
alex011251
Ja jestem za curlem smile.gif Bo tak patrze porownujac na serwie jest od headers szybszy.
zegarek84
tak na prawdę przy sekwencyjnym sprawdzaniu plików różnicy między curl'em a tą funkcją niemal nie będzie... różnica pojawi się dopiero przy prawidłowym skorzystaniu z curl_multi lub z surowych socketów (co było by trudniejsze) odpytując je asynchronicznie pisząc skrypt zdarzeniowo... dodatkowo warto mieć zapamiętane połączenie jeśli ponawiamy zapytanie z tym samym serwerem...

dodatkowo chciałbym nadmienić, iż obudowując odpowiednio curl_multi w klasę, pisząc zdarzeniową obsługę jego nie musimy znać na starcie liczby połączeń i w między czasie co odpowiedź możemy wykonywać inny fragment kodu... swoją drogą jak to się dobrze napisało to aż dziw był jak pewnej osobie skrypt bez przydzielania większych zasobów i uciekania do crona w jednym zapytaniu skrypt był wstanie zalogować się na ponad 500 forach, pobrać wymagane dane a następnie dodać temat w odpowiednim dziale (w sumie 3 zapytania HTTP co daje łącznie ponad 1500 zapytań ;D)
alex011251
Wlasnie zastanawia mnie zasobozernosc smile.gif Bo jezeli mam forum i go przeglada kilkaset osob i badz konkretny post i na nim dodane pare grafik ktore sa wyswietlane po wykonaniu curl badz get_headers czy to mi nie przymuli serwera. Bo to za kazdym razem musi sprawdzac czy grafika jest czy nie


Czy taie cos jes dobre? dopiero przestawiam sie na oop
  1. class classSecurityBasicAuth {
  2. public function __construct($url,$komunikat) {
  3. $handle = curl_init($url);
  4. curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
  5. curl_setopt($handle, CURLOPT_NOBODY, true);
  6. curl_exec($handle);
  7.  
  8. $httpCode = curl_getinfo($handle, CURLINFO_HTTP_CODE);
  9. if($httpCode == 200) {
  10. echo("<img src=\"".$url."\" />");
  11. }
  12. else {
  13. echo("$komunikat");
  14. }
  15.  
  16. curl_close();
  17.  
  18. }}
StrefaPi
przetestuj :P

/ogólnie przy zwykłym wywołaniu przyśpieszenie z curla też jest, oczywiście nie takie jak w multi, ale moim zdaniem zauważalne/
alex011251
To wczesniejsza wersja ^^ Ogolnie to ten temat w OOP to nawet nie tyczy sie do konca tej klsy. Ale ogolnego programowawania w OOP

Przetestowalem dodajac 30obrazkow wadliwych.
Poradzilo sobie po 3s wiec szczerze mowiac przy takiej funkcji to nawet dobrze wyszlo smile.gif Liczac ze standardowo na forum nawet zawyzajac srednia to chyba po wylwolaniu strony moze jest dodawanych z 5obrazkow czasem wiecej smile.gif A do tego malo kto doklada jakis wadliwy. Wiec jestem jak najbardziej zadowolony z funkcji curl smile.gif
Ale tylko pytanko czy calosc tego kodu co mi podeslales jest potrzebna. Czy czest nie jest zbedna smile.gif
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.