Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Problem z wykresem w php i Phplot
Forum PHP.pl > Forum > Przedszkole
AdrianT
Witam
Szanowni Państwo
No cóż - znowu potrzebuję pomocy - tym razem w wykresach
Standardowy przykład:

  1. ini_set('display_errors', 'on');
  2. require '/home/adrian/Pobrane/phplot-6.2.0/phplot.php';
  3.  
  4. $graph = new PHPlot;
  5. $example_data = array(
  6. array("2005-04-01",20),
  7. array("2005-04-02",30),
  8. array("2005-04-03",10),
  9. array("2005-04-04",4),
  10. array("2005-04-05",5),
  11. array("2005-04-06",4),
  12. );
  13. $graph->SetDataValues($example_data);
  14. $graph->SetPlotType( "lines");
  15. $graph->DrawGraph();



daje w wyniku:

Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/t1.php:213) in /home/adrian/Pobrane/phplot-6.2.0/phplot.php on line 2311
�PNG  IHDRX�[� PLTE��������� �3� pHYs���+�IDATx���ώ�4�&�@Ť��X��X!�tݫΆU��{�<[�HlY��]�4�W*I�4N����O𧨓������w}��a,))))))��&�K#�T���T�X�X�sv���%�3�����X=,�3=�,��9F����JX>JX>JX>JX>JX>JX>JX>JX>jf��LjU���,J,V������}c>��}��� ���z�J��-��./��k�$�� �'����@Y>X�h�HI>X�8�ĭ�f�V5 #�ڲ(����˸�?��?���Uw����rǪ�]�Pd5��j)ʂu��j&�'��y,v�V,q{�ɸ��,�*��L�C�'_ϳUc��5����j��=�MR����!��b�d\�X�^0Y�X�T�Ǹ\���\�D{V7�1������c\�X]FE�%�g1a�,�"�]c��o�r�:h�ar��y,�q%,`!


to tylko "kawałek" wykresu - jest tego więcej.
Dodatkowo podejście z Temat: PHPRysowanie wykresu liniowego daje podobny/ten sam rezultat.
Analizując phplot.php widze że problem może tkwić w braku buforowania przez przeglądarkę ale zanim "grzebnę" w phplot.php chciałbym jednak zapytać - jak to zrobić? smile.gif.
Proszę o pomoc.



trueblue
Sprawdź raczej co się dzieje w pliku t1.php w linii 213.
AdrianT
Dzięki za podpowiedź ale:
  1. $tab=file("/home/.........../czujniki.csv");
  2. linia 208: foreach ($tab as $TabWierszy)
  3. linia 209 {
  4. linia 210: $wiersz=explode(';',$TabWierszy);
  5. linia 211: $polecenie="INSERT INTO Czujnik (numer, Aktywnosc, idUrzadzenia)
  6. linia 212 VALUES ($wiersz[0], $wiersz[1],$wiersz[2]);";
  7. lina 213: echo "<br><br>$polecenie ----<br>";


Jest to kawałek kodu odpowiedzialny za ładowanie danych z pliku.
Takich pobrań próbnych danych testowych plik ma kilka i są one również wykonywane wcześniej przed tą częścią kodu
Dane w bazie są poprawne i zgodne z tym co jest w pliku.



trueblue
Spoko, ale:
w linii 213 masz echo, więc drukujesz na ekran dane przed tym jak phplot ustawia nagłówek dla obrazka.
Komunikat dokładnie wskazuje ten błąd.
AdrianT
więc linię:

require '/home/adrian/Pobrane/phplot-6.2.0/phplot.php';

dałem na sam przód i błąd dalej wskazuje tą samą linię

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta charset="utf-8" />
  5. <title>Łączenie z bazą</title>
  6. </head>
  7. <body>
  8.  
  9.  
  10. <?php
  11. require '/home/adrian/Pobrane/phplot-6.2.0/phplot.php';
  12. .
  13. .
  14. .
  15. .



trueblue
Oczywiście.
Ale output started gdzie indziej.
Teraz przed wysłaniem nagłówka przez phplot, wysyłasz kod html.
AdrianT
Tak - wiem- i kilka wariacji jeśli chodzi o położenie

  1. require '/home/adrian/Pobrane/phplot-6.2.0/phplot.php';


w górę też nie przyniosło rezultatu
trueblue
Jaki efekt chcesz uzyskać?
AdrianT
Chciałbym wstawić wykres liniowy w oparciu o wyniki z mysql'a.
Zarówno próba rysowania ręcznego jak i wstawiania w oparciu o dość dopracowaną bibliotekę phplot daje taki sam efekt.
trueblue
Kod ma generować obraz bez drukowania na ekran innych znaków (przed otwarciem znacznika <?php czy też przy użyciu echo).
A jeśli chcesz osadzić w kodzie html obrazek, to osadza się go poprzez użycie tagu <img> z odpowiednim atrybutem src (wiesz już jaki ma być src?).
AdrianT
Nie wiem.
Pasuje żeby obraz był generowany w zależności od wyboru np.: zakresu dat i konkretnego urządzenia (będzie ich kilkanaście).
Czy możesz się ustosunkować do tego buforowania strony (jestem początkujący więc wybacz jeśli bredzę).
Poniżej jest "wycinek": phplot.php na który wskazują błędy

  1. /**
  2.   * Tells the browser not to cache the image
  3.   *
  4.   * This is used by PrintImage, depending on SetBrowserCache(). It sends
  5.   * HTTP headers that discourage browser-side caching.
  6.   * Originally submitted by Thiemo Nagel. Modified to add more options based on mjpg-streamer.
  7.   *
  8.   * @return bool True always
  9.   * @since 5.8.0
  10.   */
  11. protected function DisableCaching()
  12. {
  13. header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  14. header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
  15. header('Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0');
  16. header('Pragma: no-cache');
  17. return TRUE;
  18. }
  19.  
  20. /**
  21.   * Outputs the generated image to standard output or to a file
  22.   *
  23.   * This is automatically called by DrawGraph(), unless SetPrintImage(False) was used.
  24.   *
  25.   * @return bool True always
  26.   */
  27. function PrintImage()
  28. {
  29. if (!$this->browser_cache && !$this->is_inline)
  30. $this->DisableCaching();
  31.  
  32. // Get MIME type and GD output function name:
  33. if (!$this->GetImageType($mime_type, $output_f)) return FALSE;
  34.  
  35. if (!$this->is_inline) {
  36. Header("Content-type: $mime_type");
  37. }
  38. if ($this->is_inline && isset($this->output_file)) {
  39. $output_f($this->img, $this->output_file);
  40. } else {
  41. $output_f($this->img);
  42. }
  43. return TRUE;
  44. }
trueblue
Dwukrotnie opisywałem Ci, że problem nie leży po phpplot, ale wynika ze sposobu jaki go używasz.

Tu masz dwa sposoby użycia: https://sourceforge.net/p/phplot/discussion.../881ad912/#83be
Pierwszy z nich jaki Ci sugerowałem.
AdrianT
trueblue - Serdeczne Dzięki za pomoc - jest OK

Gdyby ktoś kiedyś potrzebował to:



  1. ini_set('display_errors', 'on');
  2. require '/...scieżka do pliku .../phplot.php';
  3. $graph = new PHPlot();
  4. $example_data = array(
  5. array("2005-04-01",20),
  6. array("2005-04-02",30),
  7. array("2005-04-03",10),
  8. array("2005-04-04",4),
  9. array("2005-04-05",5),
  10. array("2005-04-06",4),
  11. );
  12. $graph->SetDataValues($example_data);
  13. $graph->SetPlotType( "lines");
  14. $graph->SetIsInline(True); //należy ustawić na True
  15. $graph->SetOutputFile("test.png");
  16. $graph->DrawGraph();
  17. echo "<img src=\"test.png\" border=\"0\" width=\"650\" height=\"400\" style=\"float: left\" >";
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.