I think by now most sysadmin types know about rrdtool and the nice graphs it makes. I recently wanted to create some graphs by hand using PHP so I turned to the php-rrdtool extension. I found that it takes a little work to get it to compile but that could be because I’m not constantly recompiling PHP and just don’t know better. You can get this module as an rpm for fedora (php-rrdtool) but I like to compile php by hand so I couldn’t use it. I’m going to assume that you know how to compile PHP normally with whatever other items you want to include and that you have the rrdtool development libraries installed or have compiled and installed rrdtool from source.
Step 1. Get the PHP rrdtool source
Go to the contrib directory on the rrdtool distribution site:
http://people.ee.ethz.ch/~oetiker/webtools/rrdtool/pub/contrib/
There are a number of files in this directory that mention rrd. You want the one named: php_rrdtool.tgz
Step 2. Untar into the correct place
Now that you have the source go into your php source directory and then into the ext directory. So you will be somewhere like this:
/usr/local/src/php-5.1.3/ext/
Now untar the source into this directory.
Step 3. Recreate the php configuration file
There is a warning that you will get if you do not have autoconf 2.13 installed on your system when you try to do this. It is easy enough to get this version if you have fedora so that is what I did.
One tricky part to this is that I had to remove the old configuration file first before the new one could be created.
- Change directory to your PHP source, if you are still in the ext directory just cd ..
- Remove the existing configuration file
- If you are using autoconf 2.13 run the following command:
PHP_AUTOCONF=autoconf-2.13 ./buildconf –force
If you are using whatever other autoconf you have installed just run:
./buildconf –force - You should now have a new configuration file that can be run with the –with-rrdtool option
Step 4. Test
After compiling with rrdtool you should be able to use the phpinfo() function to list the installed extensions. If everything went right you should see rrdtool listed.
[tags]rrdtool, php[/tags]
Pingback: IONCANNON » PHP RRDTool tutorial
Hi,
I am trying to following your instructions (thank you btw) and while everything compiles I am not seeing any mention of rrdtool during the make/install. I rebuild the config file but when I run the ./configure I don’t see it. Below is autoconf and the configure I am using. Do you have any idea what the problem could be?
[root@localhost php-5.2.0]# PHP_AUTOCONF=autoconf ./buildconf –force
Forcing buildconf
using default Zend directory
buildconf: checking installation…
buildconf: autoconf version 2.59 (ok)
buildconf: Your version of autoconf likely contains buggy cache code.
Running cvsclean for you.
To avoid this, install autoconf-2.13.
rebuilding configure
aclocal.m4:2056: PHP_PROG_LEX is expanded from…
rebuilding main/php_config.h.in
autoheader: WARNING: Using auxiliary files such as `acconfig.h’, `config.h.bot’
autoheader: WARNING: and `config.h.top’, to define templates for `config.h.in’
autoheader: WARNING: is deprecated and discouraged.
autoheader:
autoheader: WARNING: Using the third argument of `AC_DEFINE’ and
autoheader: WARNING: `AC_DEFINE_UNQUOTED’ allows to define a template without
autoheader: WARNING: `acconfig.h’:
autoheader:
autoheader: WARNING: AC_DEFINE([NEED_FUNC_MAIN], 1,
autoheader: [Define if a function `main’ is needed.])
autoheader:
autoheader: WARNING: More sophisticated templates can also be produced, see the
autoheader: WARNING: documentation.
aclocal.m4:2056: PHP_PROG_LEX is expanded from…
[root@localhost php-5.2.0]# ./configure ‘–prefix=/usr/local/groundwork’ ‘–exec-prefix=/usr/local/groundwork’ ‘–with-config-file-path=/usr/local/groundwork/etc’ ‘–libdir=/usr/local/groundwork/lib’ ‘–with-libdir=lib’ ‘–with-apxs2=/usr/local/groundwork/apache2/bin/apxs’ ‘–enable-force-cgi-redirect’ ‘–with-mod_charset’ ‘–enable-safe-mode’ ‘–enable-shared’ ‘–with-ldap=/usr/local/groundwork’ ‘–with-layout=GNU’ ‘–enable-libxml’ ‘–with-libxml-dir=/usr/local/groundwork’ ‘–enable-spl’ ‘–with-regex=php’ ‘–disable-ipv6’ ‘–enable-session’ ‘–with-openssl=/usr/local/groundwork’ ‘–with-jpeg=/usr/local/groundwork’ ‘–with-png=/usr/local/groundwork’ ‘–with-zlib=/usr/local/groundwork’ ‘–with-gd=/usr
/local/groundwork’ ‘–enable-calendar’ ‘–with-mnogosearch=/usr/local/groundwork’ ‘–with-mysql=/usr’ ‘–enable-ctype’ ‘–with-freetype’ ‘–enable-soap’ ‘–with-rrdtool’
Thank you, so much for the help!
-Scott
You should double check that you removed your configuration file before you ran the buildconf.
Trying to build on PHP 5.2.0 and getting the following:
./buildconf –force
Forcing buildconf
using default Zend directory
buildconf: checking installation…
buildconf: autoconf version 2.60 (ok)
buildconf: Your version of autoconf likely contains buggy cache code.
Running cvsclean for you.
To avoid this, install autoconf-2.13.
make: Fatal error in reader: build/build2.mk, line 31: Badly formed macro assignment
Current working directory /usr/local/nms/Source/php-5.2.0
*** Error code 1
The following command caused the error:
make -s -f build/build2.mk
make: Fatal error: Command failed for target `all’
Anyone have any ideas?
Thanks, Vern
OK, ignore the previous post. After installing autoconf 2.13, I got past this issue …..
Right into another issue. Apparently this code is not compatible with the newer versions of RRDTOOL.
/usr/local/nms/Source/php-5.2.0/ext/rrdtool/rrdtool.c:347: error: too few arguments to function `rrd_graph’
make: *** [ext/rrdtool/rrdtool.lo] Error 1
The statement in question is passing 5 arguments:
if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, &ysize) != -1 )
rrd:graph is now looking for 8 arguments.
int rrd_graph(int, char **, char ***, int *, int *, FILE *, double *, double *);
Not really being a coder, I am at a loss as to how to fix this.
Vern
Well I got it working… For some reason with any other version of AUTOCONF (even newer versions) it will not configure correctly. I had to uninstall the autoconf rpm and compile 2.13 from source to get it to work. Once I did that your instructions were perfect! Thanks for these tips.
For rrdtool versions 1.2.x, use the CFLAG:
CFLAGS=-DHAVE_RRD_12X
It worked for my using rrdtool 1.2.15 and php 5.2.0.
System: Red Hat Enterprise Linux ES release 4
Apache: 2.2.3
PHP: 5.2.1 from source
ImageMagick: 6.3.3
Since I didn’t want to recompile PHP, and also didn’t want to downgrade autoconf to 2.13, here’s my route:
– Download and untar MagicWand
– In MagicWand directory, run phpize
Note: Mine is located at /usr/local/apache/php/bin/phpize
– Type autoconf
– Type ./configure with options.
Note: I had to specify location of PHP config file, and directory of ImageMagick install, so I entered: ./configure –with-php-config=/usr/local/apache/php/bin/php-config –with-magickwand=/usr
– Type make
Note: Make creates magickwand.so in the modules subfolder.
– Copy magickwand.so to your php modules directory from the MagickWand modules subdirectory.
Note: My PHP modules directory is located at /usr/lib/php/modules/
– Add ‘extension=magickwand.so’ to your php.ini file if it’s not there already.
– Restart Apache
I am running PHP server in windows environment.
Maybe this is a stupid question: ‘is there any bin source of PHP RRDtool for Windows platform?’
Hey Bitto, I’m after a Windows version of the extension too. Chris of SiteBuddy.com has tried to give it a go
http://www.sitebuddy.com/php/rrdtool_extension_windows_binaries
For impatient and perfectionist It possible to build a clean php rrdtool debian package in 5mn …
First you should use http://www.dotdeb.org php5 packages that are always up to date …
With the help of this little magic script
http://svn.dotdeb.org/debianize/
You can build your extension …
This script requires php5-dev, deb-helper, build-essential package and of course the
php-rrdtool source (http://ftp.idilis.ro/mirrors/rrdtool/contrib/php_rrdtool.tgz
)
/usr/src#apt-get install php5-dev deb-helper build-essential librrd2-dev
/usr/src#wget http://ftp.idilis.ro/mirrors/rrdtool/contrib/php_rrdtool.tgz
/usr/src#tar-xvzf php_rrdtool.tgz
/usr/src#./debianize5 rrdtool
…
Creating php5-rrdtool…
PHP version : 5.2.3-0.dotdeb.1
PHP Api : 20041225
Configuring for:
PHP Api Version: 20041225
Zend Module Api No: 20060613
Zend Extension Api No: 220060519
dh_testdir
…
dpkg-deb: building package `php5-rrdtool’ in `../php5-rrdtool_5.2.3-0.dotdeb.1_amd64.deb’.
Nice ;)
Hope that will be useful …
@Sébastien Cramatte
The correct package name of deb-helper it should be written as debhelper (i have tried by using Debian Etch), and also i have been followed your post and it works properly..thanks..
Pingback: RRDTool bindings for php5 in Ubuntu
Much easier to compile if you use phpize
cd rrdtool-php/
phpize
./configure –enable-rrdtool
make
make install
echo “extension=rrdtool.so” >> /etc/php.ini
restart your web server or continue with command line.
Hi! i am using this
Quick Install of the PHP RRDTool Extension
==========================================
PHP version : 5.2.1
Apache version : 2.x
This extension is build for PHP 5.2.1 as downloadable from the PHP site,
and will probably not work with other versions!
Also it is recommended that you download the complete RRDTool package
for further documentation:
http://oss.oetiker.ch/rrdtool/
can you help me to work with PHP 5.3.3 i cant found any info about it