It’s not as difficult as it might sound, so here’s the quick-n-dirty way of installing and compiling your very own PHP extensions/libraries, from the PHP source code. With a normal install, not every library is compiled and installed – so it might leave you with several functions that aren’t working.
This guide is building a module for PHP 5.2, but the steps are identical for PHP 5.3, 5.4, 5.5, or 5.6.
In this case, I’ll assume you’re trying to compile the dBase-extension. It’ll probably start with the following error, shown on screen:
Fatal error: Call to undefined function dbase_create() in ... on line ...
It means the extension wasn’t loaded – and in most cases isn’t present on the server at all. So we’ll have to create it ourselves.
Install the PHP development package
On Ubuntu/debian, you can use apt-get, it’s a piece of cake.
$ apt-get install php5-dev
On CentOS / Red Hat, use yum for your PHP packages.
$ yum install php-devel
(alternatively: check which repositories you’re using and which PHP package you have installed, the package may also be named php55-devel
, or similar).
Download & unzip the PHP5 source code
Go the the PHP-download page, and select the complete PHP5 source code.
$ cd /usr/local/src $ mkdir php_source $ cd php_source $ wget http://be.php.net/distributions/php-5.2.6.tar.gz
Next, unzip the file you just downloaded (the “.gz”-file extensions means it has been gzipped).
$ gunzip php-5.2.6.tar.gz
And untar it.
$ tar xvf php-5.2.6.tar
Prepare the extension (phpize)
Go to the proper directory. You just untarred the files, so we’ll browse to that specific subdirectory (note; directory-names may vary, depending on the version you just downloaded). In this case, we go to the “dbase” subfolder, but it could be any of the extensions you want to configure.
$ cd php-5.2.6/ext/dbase/
And use phpize
in that directory.
$ cd /usr/local/src/php_source/php-5.2.6/ext/dbase/ $ phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519
Configure & Make the extension
Configure it
$ ./configure
And make it
$ make
The make
command, will render a lot of text (compilation-info), and most likely end with the following snippet.
... ---------------------------------------------------------------------- Build complete. (It is safe to ignore warnings about tempnam and tmpnam). Extension is now created in ./.libs/dbase.so Move it to the extensions directory
Woohoo, we compiled our dbase-extension! Now all we need to do, is activate it.
Move the extension
If you already have an extensions-directory on your server, use that one – if not, you can create a new directory to place the extensions. To find out, check the extension_dir directive.
$ php -i | grep extension_dir extension_dir => /usr/lib/php/extensions/no-debug-non-zts-20121212
Copy the extension to that directory.
$ cp libs/dbase.so /usr/lib/php/extensions/no-debug-non-zts-20121212/
Edit your PHP.INI
The extension is ready to be included – now we need to change the php.ini file to load that particular extension. First, find out which php.ini your system is using (note: the CLI may load a different config than the php-fpm or the Apache module one, a phpinfo()
in your application would tell you for certain).
$ php -i | grep 'Configuration File' Configuration File (php.ini) Path => /etc Loaded Configuration File => /etc/php.ini
In the example above, we use /etc/php.ini
as our base php.ini file.
$ vi /etc/php.ini
Add the module you want to load. I usually add these at the very bottom, where my changes are. This is relative to the extension_dir
directive you found above.
extension=dbase.so
Restart your php
In case of Apache
$ /etc/init.d/httpd restart $ /etc/init.d/apache2 restart
or php-fpm:
$ /etc/init.d/php-fpm restart
And it’s as easy as that!