07 Januari 2017 - 23:32:00 - Read: 318

Install Bundle Lengkap Library GD Tanpa Recompile PHP7

Yarp, ceritanya lagi ikutan Facebook Hacker Cup 2017. Di soal pertama tantangannya adalah mencari tahu warna pixel dari posisi koordinat yang diberikan oleh soal pada sebuah "Progress Pie" dimana keseluruhan progressnya berdasarkan persentase .

Secara logika, soalnya cukup mudah. Karena kita cukup mengetahui warna background dari koordinat yang diberikan oleh soal. Soal dikerjakan dengan PHP7.0. Dan disinilah letak masalahnya :p

Progress 12% dan Progress 13%

Perhatikan "dot" kecil berwarna merah pada gambar diatas. Pada progress ke-13%, posisi dot sudah benar berada di background warna hitam, hanya saja pada progress 12% seharusnya posisi "dot" ada di luar progress (background hitam). Hal ini dikarenakan garis diagonal yang dibentuk dengan PHP tidak lurus. T_T

Gooling, dan masalah jagging ini bisa diselesaikan dengan "Antialiasing" http://nz2.php.net/manual/en/function.imageantialias.php

imageantialias($image, true);

Jalankan, dan malah nemu masalah baru.

Uncaught Error: Call to undefined function imageantialias()

Nah loh, librari "gd" udah terinstall, tapi fungsi imageantialias() tidak ditemukan?

Googling lagi, ternyata memang secara default bundle librari "gd" pada PHP tidak diinstall dengan lengkap. Dan keterangan dari php.net

imageantialias() is now generally available. Formerly it was only available if PHP was compiled with the bundled version of the GD library.

Jadi solusinya adalah meng-compile sendiri librari "gd" versi lengkapnya.

Nemu di http://stackoverflow.com/questions/35560150/php-gd-bundled-extension-without-recompiling-php-solution,

Pertama kita install terlebih dahulu php-dev

$ sudo apt-get install php7.0-dev

atau pada php 5

$ sudo apt-get install php5-dev

Lalu download source code PHP di http://php.net/downloads.php, download sesuaikan dengan versi PHP yang sudah terinstall. Disini kita tidak akan menginstall PHP, karena yang kita butuhkan hanya librari "gd" nya saja. Langkah berikutnya extract file PHP yang sudah kita download tadi, lalu masuk ke direktori /ext/gd.

$ cd /path/download-an/php/ext/gd/
$ phpize

Berikutnya, kita configure dengan parameter

$ sudo ./configure --with-php-config=/usr/bin/php-config --with-gd --with-freetype-dir=/PATH/DIREKTORI/FREETYPE --with-vpx-dir=/PATH/DIREKTORI/VPX --with-jpeg-dir=/BISA/PAKE/USR/LIB --with-xpm-dir=/PATH/DIREKTORI/XPM
Ganti huruf besar dengan lokasi direktori kalian masing-masing.

Biasanya direktori-direktori tersebut terdapat didalam /usr/lib

Terakhir, compile dengan make.

$ sudo make

Jangan dilanjutkan dengan make install yak :D

Yarp, setelah berhasil dan tidak ada error, seharusnya file bundle "gd.so" baru, ada didalam direktori /modules/. Lalu copy file tersebut kedalam direktori php yang sudah terinstall, tempat file-file extension ".so" berada. Punyaku ada di /usr/lib/php/20151012/

$ sudo cp ./modules/gd.so /usr/lib/php/20151012/gd.so

Lalu restart apache.

$ sudo service apache2 restart

Sekarang tinggal kita pastikan dengan php kalo fungsi imageantialias() sudah terinstall.

<?php
	if (false === var_dump( function_exists('imageantialias'))) echo 'error1'; 
$ php test-imageantialias.php
bool(true)

Jika outputnya adalah "true", berarti kita sudah berhasil menginstall librari "gd" versi bundle lengkapnya.

Yarp, semoga gak bermanfaat. ^_^