Jeszcze jeden blog o programowaniu

Radosne twórczości leniwego programisty

Błąd Strict standards: Non-static method System::mktemp() should not be called statically, assuming $this from incompatible context in C:\wamp\bin\php\php5.3.4\PEAR\Image\GraphViz.php on line 1005

4 komentarze

Trafiłem ostatnio na artykuł opisujący wykorzystanie paczki Image_Graphviz z repozytorium PEAR do obsługi i generowania grafów w języku PHP. Instalacja przebiegła bez najmniejszych problemów:

pear install --alldeps Image_GraphViz

jednak już próba uruchomienia przykładu http://pear.php.net/manual/en/package.images.image-graphviz.example.php sprzyjała pojawianiu się błędu:

Strict standards: Non-static method System::mktemp() should not be called statically,
assuming $this from incompatible context in C:\wamp\bin\php\php5.3.4\PEAR\Image\GraphViz.php on line 1005

Niestety, mimo zgłoszenia błędu, autorzy uznali, że błędu nie poprawią, a sam błąd wynika z PHP w wersji 4.x, pod kątem której paczka Image_Graphviz była pisana. Rozwiązaniem idealnym byłoby przystosowanie kodu Image_Graphviz do pracy z PHP 5.X – mniej idealnym zastosowanie niewielkiego obejścia:
wyłączenia wyświetlania błędów w kodzie na samym początku kodu generującego obrazek z grafem – przykład więc powinien wyglądać jak poniżej:

<?php
error_reporting(E_ALL & ~E_STRICT); // EDIT: zmiany zalecone przez D3Xa 🙂
ini_set('display_errors', 0);
require_once 'Image/GraphViz.php';
$gv = new Image_GraphViz();
$gv->addEdge(array('wake up' => 'visit bathroom'));
$gv->addEdge(array('visit bathroom' => 'make coffee'));
$gv->image();
// EDIT: poniżej zmiany zalecane przez D3Xa
error_reporting(-1);
ini_set('display_errors', 1);

czego efektem będzie pożądany obrazek:


Warto także przyjrzeć się dokumentacji Image_Graphviz oraz sam projekt GraphViz.

Advertisements

Written by filipgorczynski

2012.02.29 @ 21:25:40

komentarze 4

Subscribe to comments with RSS.

  1. Dobrze by było na koniec przywrócić starą wartość error_reporting. A w ogóle to najlepiej nie ustawiać jej na 0, tylko na E_ALL & ~E_STRICT.

    D3X

    2012.02.29 at 22:13:17

  2. @D3X: A po co wyłączać E_STRICT? Ja lubię wiedzieć o wszystkich problemach, jakie się pojawiają w kodzie. Oczywiście na produkcji to jest dyskusyjne, ale na maszynie developerskiej mam zawsze E_ALL | E_STRICT. Ta druga część to przyzwyczajenie z 5.2, gdzie błędy typu E_STRICT nie były domyślnie pokazywane, bo w 5.3 E_STRICT jest już włączony w E_ALL.

    Tomasz Kowalczyk

    2012.03.02 at 23:09:27

    • Chodziło o ustawienie jej tuż przed skorzystaniem z graphviz. Tak, jak zresztą zostało poprawione przez Filipa. Oczywiście, że domyślnie mam ustawione na -1 🙂

      D3X

      2012.03.02 at 23:14:25


Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: