Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: automatycznie generowane wykresy
Forum PHP.pl > Forum > PHP
komratk
Witam.

Napisałem skrypt do automatycznego generowania wykresów przez użytkownika. Mam jednak pewien problem polegający na tym, że skrypt zachowuje się inaczej w zależności od przeglądarki. Tym razem najlepiej o dziwo działa pod IE7 smile.gif

Ale do rzeczy.

Oto kod:

  1. <?
  2.  
  3. Function RysujWykres($s,$w,$a,$b,$c)
  4.  
  5. {
  6.  
  7. &#8230;
  8.  
  9. //zbieranie i obliczanie wszystkich danych + rysowanie wykresu
  10.  
  11. ImagePNG($ob, "temppic/obrazek.png"); //zapis do pliku
  12.  
  13. ImageDestroy($ob);
  14.  
  15. }
  16.  
  17. RysujWykres($s,$w,$a,$b,$c);
  18.  
  19. echo '<img src="temppic/obrazek.png">';
  20.  
  21. ?>


Efekt działania jest taki, że skrypt generuje wykres, zapisuje go pod nazwą obrazek.png a następnie wyświetla w przeglądarce. Wszystko jest ok. gdy wykres generuje się za pierwszym razem.

Przy zmianie danych przesyłanych do funkcji RysujWykres, plik obrazek.png zostaje zastąpiony nowo utworzonym i powinien wyświetlić się nowy wykres. Niestety dzieje się tak tylko pod IE7. Opera i Firefox pamiętają zawsze starszą wersję pliku obrazek.png i zamiast wyświetlić wykres z nowymi danymi, wyświetlają wykres poprzedni. Dopiero gdy odświeżę stronę zostaje wyświetlony wykres z prawidłowymi danymi.

Próbowałem przed narysowaniem obrazka usunąć plik na serwerze za pomocą

@unlink("temppic/obrazek.png");

Ale to nic nie dało.

Czy ktoś może coś doradzić jak sobie poradzić z tym problemem?
sniezny_wilk
Jak wyświetlasz obrazek to wyświetlaj go z poziomu PHP, nie musisz go zapisywać. Jak dasz sobie header z odpowiednim contentem, to możesz wywołać tak

  1. <img src="obrazek.php">


to powinno załatwić sprawę a jak nie to

  1. <?php
  2. echo '<img src="obrazek.php?nocache='.time().'">';
  3. ?>
ayeo
Tak na marginesie, jak dajesz próbkę kodu to używaj znaczników BBcode.
Pozdrawiam!
komratk
Załóżmy, że przedstawiony przeze mnie kod to zawartość pliku index.php

Plik index.php ma już zdefiniowany Content-type : text/html
Funkcji RysujWykres używam niejako do osadzania obrazku w kodzie strony.

Nie bardzo wiem jak zrobić by wyświetlać obrazek z poziomu php, ponieważ zastanawia mnie jak przekazać dane do pliku obrazek.php?

Plik obrazek.php na pewno będzie zawierał:
Header('Content-type: image/png');

Ale jak go połaczyć z index.php?
sniezny_wilk
Załóżmy masz już tego headera, i masz już wszystko gotowe, to zamiast zapisywać wszystko do pliku daj po prostu

  1. <?php
  2. imagepng($image);
  3. ?>


Czyli nie podajesz drugiego parametry, będziesz w ten sposób tylko wyświetlał obraz a nie będziesz zapisywał, załóżmy, że plik nazywa się obrazek.php i wykorzystujesz to co już Tobie podałem wcześniej, czyli

  1. <img src="obrazek.php">
webdice
Mimo upominania nie dodałeś znaczników bbcode, tym razem poprawiłem za Ciebie, następnym razem temat zamknę.
komratk
Obawiam się, że trochę niejasno wytłumaczyłem mój problem
Nie mogę umieść kodu
  1. <?php
  2. Header('Content-type: image/png');
  3. imagepng($image);
  4. ?>

W pliku index.php, który ma już zdefiniowany Content-type.
Wszystkie dane potrzebne do wygenerowania obrazka znajdują się pliku index.php a nie w obrazek.php.
Tak naprawdę to mam tylko 1 plik - index.php

Jesli miałbym stworzyć przykładowo obrazek.php i nadać mu odpowiedni header to zastanawiam się w jaki sposób przekazać do niego dane?

Celowo użyłem zapisu do pliku
  1. <?php
  2. ImagePNG($ob, "temppic/obrazek.png");
  3. ?>

i odczytu
  1. <?php
  2. echo '<img src="temppic/obrazek.png">';
  3. ?>

Ale teraz widze, ze to nie bylo najlepsze rozwiazanie. Niestety nie znam innego
Shili
Dane możesz przekazywać przez adres, w sesji, przez ciastka. względnie możesz wyłączyć cache'owanie dla całej strony, w której tworzysz obrazek (chociaż to akurat pewnie nie jest dobre rozwiązanie).
komratk
Witam. Udało mi się wyodrębnić kod funkcji do pliku obrazek.php i obrazek jest tworzony tak jak zalecil "sniezny_wilk"
Przyznam sie szczerze, ze nie wiedzialem, ze tak mozna, ale zrobilem coś takiego:
  1. <img src="obrazek.php?zm1=1&zm2=2&zm3=3 ...i tak dalej wszystkie zmienne...">


i poskutkowało.

Dzięki Shili za odświeżenie umysłu smile.gif
Pozdrawiam
EOT
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.