Tartalomjegyzék

< PHP

PHP Grafikonok

Fontok a grafikonra rajzoláshoz

Saját grafikon

index.php
<?php
 
header("Content-type:text/html; charset=utf-8");
 
$adat = array(25, 75, 50, 10, 50, 45, 15, 27, 48, 88, 50, 58);
 
$img = genGrafikon($adat);
 
//kép elkészítése
imagejpeg($img, "sajat.jpg");
imagedestroy($img);
echo "A kép elkészítésével végeztünk<br />";
 
echo <<<EOT
<img src="sajat.jpg" alt="Saját rajzolt kép" />
EOT;
 
function genGrafikon($adat)
{
  $meret = count($adat);
  $width = 400;
  if($meret > 10)
  {
    $n = $meret - 10;
    $width = $width + (40 * $n);
  }
 
  $img = imagecreatetruecolor($width, 400);
 
  $feher = imagecolorallocate($img, 255, 255, 255);
  $kek = imagecolorallocate($img, 0, 0, 255);
 
  imagefill($img, 1, 1, $feher);
 
  //Szöveg kiírása
  $szoveg = "Tégla";
  $szoveg = iconv("UTF-8", "ISO-8859-2", $szoveg);  
  imagestring($img, 5, 100, 0, $szoveg, $kek);
 
  $kepMagassag = 400;
  $max = 100;  
 
  $x1 = 10;
  $x2 = $x1 + 20;
  for($i = 0; $i<$meret; $i++)
  {
    $y1 = $kepMagassag - ($adat[$i] * ($kepMagassag / $max));
    //Téglalap elkészítése
    imagerectangle($img, $x1, $y1, $x2, 400, $kek);
    imagefill($img, $x1 + 1, 399, $kek);
    $x1 = $x1 + 40;
    $x2 = $x2 + 40;
  }
  return $img;
}
 
?>

JpGraph

Hiba megkerülése

Ha nincs engedélyezve a telepített PHP rendszeredben a imageantialias() függvényt a következő hibaüzenetet kapjuk.

Keressük meg a JpGraphError::RaiseL(25128); kezdetű sort a gd_image.inc.php fájlban majd tegyük megjegyzésbe:

function SetAntiAliasing($aFlg=true) {
$this->use_anti_aliasing = $aFlg;
if( function_exists('imageantialias') ) {
imageantialias($this->img,$aFlg);
}
else {
//JpGraphError::RaiseL(25128);//('The function imageantialias() is not available in your PHP installation. Use the GD version that comes with PHP and not the standalone version.')
}
}

Hiba javítása

Ez a megoldás PHP5 újrafordításával valósul meg, ezért hosszú ideig tarthat. Telepíteni viszont csak a php5-gd csomagot telepítjük újra. A leírás Debian Squeeze rendszeren készült.

Ellenőrizzük az imageantialias() függvény meglétét:

php -r "var_dump(function_exists('imageantialias'));"

Az eredmény ez lehet:

bool(false)

Láthatjuk, hogy nincs engedélyezve.

Szükséges eszközök telepítése:

apt-get install build-essential debhelper fakeroot
apt-get remove php5-gd
cd /usr/src/
apt-get source php5
apt-get build-dep php5
cd php5-5.3.3/

Szerkesszük a „debian/rules” fájlt és cseréljük le a következő sort:

  --with-gd=shared,/usr --enable-gd-native-ttf 

erre:

  --with-gd=shared --enable-gd-native-ttf

Elkészítjük az új csomagot:

dpkg-buildpackage -rfakeroot -uc -b

A következő hibát kapjuk:

# start our own mysql server for the tests
/bin/sh debian/setup-mysql.sh 1025 /usr/src/php5-5.3.3/mysql_db
Timed out waiting for mysql server to be available
kill: 65: No such process

kill: 65: No such process

make: *** [test-result.txt] Error 1
dpkg-buildpackage: error: debian/rules build gave error exit status 2

Javítjuk a debian/setup-mysql.sh fájlban:

# Start the daemon
$mysqld > $datadir/run.log 2>&1 &

helyett:

$mysqld --user=root > $datadir/run.log 2>&1 &
Removing patch fix-segfault-in-pgsql_stmt_execute-when-postgres-is-down.patch
Restoring ext/pdo_pgsql/pgsql_statement.c

Patch fix-memory-leak-inside-highlight_string.patch does not remove cleanly (ref
resh it or enforce width -f)
make: *** [unpatch] Error 1
dpkg-buildpackage: error: fakeroot debian/rules clean gave error exit status 2

Megoldásként futtasuk a következő parancsot a PHP5-5.3.3 könyvtárban:

QUILT_PATCHES=debian/patches quilt refresh

Telepítjük az új csomagot:

cd ..
dpkg -i php5-gd_5.3.3-7+squeeze14_i386.deb

Ugyanez Ubuntu rendszeren