Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Biblioteka GD problem
Forum PHP.pl > Forum > Przedszkole
goukan
Witam mam pytanie do zaawansowanych programistów php. Chodzi mi o bibliotekę GD. W jaki sposób można było by wyświetlać obrazek za pomocą <img src> ale przy okazji by cały skrypt się refreshował z takiego poziomu i żeby dane na obrazku się zmieniały (chcę zrobić status serwer na obrazku)
znalazłem coś takiego:
http://blog.themeforest.net/tutorials/fun-...library-part-1/
ale to nie pomaga (wpis z 27 marca), gdzie odczytywanie obrazka jest z takiego linku:
  1. <img src='http://themeforest.s3.amazonaws.com/65_gd/grayscale.php?source=cat.jpg' alt='' />

wczytywanie obrazka z takiego linka spowodowało by automatyczne zrefreshowanie obrazka z danymi aktualnie serwera np. ilość graczy
SmokAnalog
Witaj,

by mieć pewność, że przeglądarka za każdym razem pobierze obrazek od nowa, najprościej dodać do src jakąś unikalną część. W Twoim przypadku może to być na przykład:
  1. <img src='http://themeforest.s3.amazonaws.com/65_gd/grayscale.php?source=cat.jpg&time=<?php echo time() ?>' alt='' />
goukan
no dobra ale jak to zrobić? zeby pokazywało dany obrazek po wpisaniu np www.nazwa.pl/baner.php?p=nazwaserwera.png
i jak zrobić że wchodząc na taki adres pojawiał się obrazek ;/
na tą chwile skonstruowałem coś takiego:
  1. if (isset($_GET['banner']))
  2. {
  3. header('Content-Type: image/jpeg');
  4. $iiii = $_GET['banner'];
  5. $image = imagecreatefrompng($iiii);
  6. imagepng('banners/'.$image);
  7. }


ale nie pokazuje obrazka ;/ jest ten malutki kwadracik ze znakiem zapytania

ref
SmokAnalog
Masz kilka błędów. Pozwól, że wyjaśnię linia po linii:

  1. if (isset($_GET['banner']))

Jeśli używasz $_GET['banner'], to powinieneś oczywiście przekazywać parametr ?banner=XXX. Myślę, że to jasne. Piszę o tym, bo w przykładzie z poprzedniego posta nazwałeś ten parametr inaczej.
  1. header('Content-Type: image/jpeg');

Powinno być image/png, bo wypluwasz obrazek typu PNG.
  1. imagepng('banners/'.$image);

Funkcja imagepng jako pierwszy parametr przyjmuje zasób obrazka, a nie string. W zmiennej $image zwróconej przez imagecreatefrompng masz prawidłowy zasób, wystarczy przekazać go do imagepng. Nie wiem skąd Ci się wzięło to "banners/". Czy przypadkiem nie chciałeś użyć tego jako ścieżki, w której szukasz plików PNG? Jeśli tak, to powinieneś to wstawić do imagecreatefrompng, a nie imagepng.

Mam nadzieję, że sobie poradzisz z poprawieniem kodu na podstawie moich rad.

Jeszcze jedna rada: jeśli otrzymujesz błędy, komentuj tymczasowo linię z ustawianiem Content-type i wejdź w przeglądarce na URL, który ma wyświetlać obrazek. W ten sposób zobaczysz ewentualne błędy składni. Z Content-type ustawionym na obrazek, nie zobaczysz błędów.
goukan
Nie chce tego robić jako reklama, ale sam zobacz;/
http://mycrafts.pl/show.php?banner=craftworld_pl.png

kod:
  1. if (isset($_GET['banner']))
  2. {
  3. header('content-type: image/png');
  4. $iiii = $_GET['banner'];
  5. $image = imagecreatefrompng('banners/'.$iiii);
  6. imagepng($image);
  7. }

powinno działać nie? do zmiennej image przypisuję już ścieżkę do obrazka a imagepng wywołuje ten obrazek, tak jak mówiłeś
Błędu żadnego nie pokazuję
SmokAnalog
Kod wygląda w porządku. Porób testy:
  1. var_dump($_GET);
  2. var_dump(file_exists('banners/' . $_GET['banner']));

Na czas testów oczywiście zakomentuj linię z Content-type. Swoją drogą, wstawki do header powinieneś pisać wielką literą, choć to nie to powoduje błąd. Czyli Content-type, a nie content-type.
goukan
skomentowałem header i wychodzi cośtakeiego:
http://mycrafts.pl/show.php?banner=craftworld_pl.png

te znaczki to chyba obrazek nie?

dodawałem do imagepng drugi parametr czyli zapis na dysk 'banners/asd.png' i normalnie elegancko obrazek sie zapisywal;/ ale czemu nie chce się pokazac w przegladarce
i zapisuje obrazek bez zadnych problemów
SmokAnalog
Chyba mamy odpowiedź. Obrazek zapisał się prawidłowo, bo przy zapisie uwzględnia się zawartość $image. Przy wypluwaniu obrazka do przeglądarki również masz prawidłową zawartość - te właśnie śmieszne krzaczki, ALE UWAGA! Oprócz nich masz całą treść strony! Nie wiem jak masz to rozwiązane w kodzie, ale albo dołączasz plik szablonu, albo to plik szablonu wczytuje Twój plik show.php. Obstawiam tę drugą opcję. Musisz zrobić tak, żeby jedyną treścią generowaną przez plik show.php były te krzaczki z imagepng i nic innego.
goukan
Dzięki wink.gif Obrazek się faktycznie otwiera. A czy jest możlwiość, że z takiego linka będzie się refreshował status serwera na obrazku ?
Bo to pobiera obrazek z folderu który ma tam już stałe staty wprowadzone, a chodzi mi że wchodzę na ten obrazek i się staty zmieniają tak jak jest to naprawdę. Da radę tak?
SmokAnalog
Oczywiście smile.gif W tym celu powinieneś zrobić dwie rzeczy:

  1. Użyć tego unikalnego parametru w src obrazka, jak podałem powyżej - najprościej z funkcją time, bo ta wartość zmienia się co sekundę. W ten sposób zapobiegniesz sytuacji, gdzie czyjaś PRZEGLĄDARKA będzie używała obrazka z pamięci podręcznej, a statystyki na nim najpewniej są już dawno nieświeże
  2. Jeśli chodzi o wyświetlanie statystyk, to jest to proste do zrobienia. Masz dwa wyjścia:
    • Wyświetlać liczby jako font na obrazku z funkcją imagettftext, chociaż na Twoim bannerze te liczby nie wyglądają na żadną ze znanych mi czcionek
    • Powycinać wszystkie cyferki w tym stylu i nałożyć na banner. Więcej zabawy z tym, ale efekt idealny. Żeby zachować styl Twojego obecnego bannera, musiałbyś wyciąć kwadraciki od 0-9 oraz /, a potem poskładać to do kupy nakładając te kwadraciki na banner. Z samego obrazka bannera musiałbyś oczywiście wyrzucić te cyfry, czyli tekst kończyłby się na "Liczby:". Nie wiem jak z nazwami CraftWorld oraz craftworld.pl - jeśli też są dynamiczne, polecam wyciąż każdą możliwą literkę i kropkę, a potem nałożyć w analogiczny sposób.


Sposób należy do Ciebie - myślę, że znalazłbyś podobną czcionkę, jednak tekst nałożony bezpośrednio na banner mógłby odstawać trochę stylistyką, byłby moim zdaniem zbyt gładki jak na ten banner.
goukan
Nie wiem czy się rozumiemy;/
To jest mój cały kod:
http://wklej.org/hash/314b134ba88/

przykładowo wchodzę na : http://mycrafts.pl/show.php?ip=hypercraft.pl
i tam generuje się obrazek (normalna sprawa) z aktualnymi statami
nastepnie np właściciel tego serwera chce sobie wstawić ten banner na SWOJĄ stronę gdzie nie ma skryptu na wstawianie tych danych na obrazek i zapisywanie go tak więc ten obrazek który on wstawi będzie ciągle ten sam, nie będzie zmieniał liczby graczy i innych spraw BO nie ma u niego skryptu na te zmieniane obrazka z aktualnymi danymi. W takim wypadku musiałby codziennie ON wchodzić raz na godzine na moją stronę żeby zaktualizować obrazek, ale ja nie chcę takiej opcji więc czy da się zrobić tak, że jak właściciel serwera wstawi obrazek na strone swoją to będzie się odświeżał sam z siebie bez wchodzenia do mnie na strone w celu zrefreshowania go.
SmokAnalog
Plik z obrazkiem musi być tam, gdzie jest dostęp do danych. Jeśli dane są u właściciela serwera, to wtedy on powinien mieć ten plik PHP generujący banner u siebie. Jeżeli koniecznie Ty musisz mieć plik generujący banner u siebie, a on ma dane liczbowe u siebie, to jedyna możliwość (nieszczególnie fajna) to przekazywanie danych liczbowych bezpośrednio do generatora, np.: http://mycrafts.pl/show.php?ip=hypercraft.pl&players=104. Nie rozważałbym jednak takiej opcji, bo jest nieelegancka.

W skrócie: niech obrazek generuje ten, kto ma dostęp do danych.
goukan
No tak ;/ Kurde szkoda, że tak się nie da;/

a jakieś jquery ? Odświeżanie kodu po stronie serwera? Cron by się przydał ale chyba nie mogę się nim posługiwać bo hosting ww mam kupiony na proserwer za smsa.
SmokAnalog
Ale i tak w jakiś jasno określony sposób musisz się wymienić danymi z tym właścicielem serwera. On dane o liczbie użytkowników przechowuje w bazie danych czy jak? I czy każdy właściciel serwera w taki sam sposób przechowuje te dane? Jeśli nie, to rzeczywiście jedynym rozwiązaniem jest przekazywanie liczby do bannera. Czyli właściciel serwera musiałby sam obsłużyć logikę pozyskiwania liczby użytkowników, a następnie użyć jej w atrybucie SRC.
goukan
Dane wypisywane są ze skryptu który łączy się z serwerem ipobiera aktualne dane serwera. W taki sposób to działa
SmokAnalog
A Ty nie masz dostępu do tego skryptu? Nie ma jakiegoś web service do tego, typu że wchodzisz na dany URL i pokazuje Ci liczbę?
goukan
http://wklej.org/hash/314b134ba88/
dalem link do mojego calego kodu
tam wyświetla wszystkie dane serwera;/
SmokAnalog
Widzisz, czyli jednak jest do tego API i mamy te dane. No to wystarczy je przenieść do generatora obrazków odpowiednio.
goukan
To nie api tylko kawalek kodu który generuje obrazek jak wejdzie sie na dany serwer
więc jak to można zrobić?

Można też było by zrobić tak:
http://nazwa.pl/show.php?ip=ipserwera&...azwabannera.png
i wtedy skrypt będzie pobierał z linku ip serwera i odpowiednimi skryptami sprawdzał ilość graczy itd i odsyłał obrazek pod taką nazwą?
SmokAnalog
Nie do końca rozumiem. Przeanalizuj kod, który już masz, a dokładniej od linii 15. w dół. Rozumiem, że ten kod działa. Jeśli skrypt jest w stanie wyświetlić te informacje w tabeli, to bez problemu możesz użyć ich w swoim generatorze bannerów. Skrypt bierze po GET ip serwera, więc tak samo powinien robić Twój generator.

Czy coś mnie ominęło?
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.