Create Your Own PHP Extensions

Introduction to Extensions

Extensions are pre-compiled codes or libraries which enable specific functions to be used in your PHP code. These extensions may be either a PHP extension or a Zend  extension.We can see extensions in php.ini file.

; syntax:

; extension=modulename.extension

; For example, on Windows:

; extension=msql.dll

; under UNIX:

; extension=msql.so

Why we need to create Extensions

  • To create our own efficient and high performance PHP code which adds  missing features to the language.
  • When there are  limitations in PHP where we cannot make call to some library or OS specific calls.
  • When we have our own set of intelligent business logic which we want to sell and execute but do not want this to be viewed by others.
  • When we want to make PHP software to behave in a superior manner

How to create an Extension

The following system requirements need to be present to  create your own PHP extensions:

  • Text editor
  • PHP
  • Source code file and
  • C compiler.

Required files:

config. m4: The first required file to store the basic configuration data used by PHP to compile your custom extension.

PHP_ARG_ENABLE(my_code,

[Whether to enable the “my_code” extension],

[-enable-my_code  Enable “my_code” extension support])

if test $PHP_my_code != “no”; then // 1st argument declares the module

PHP_SUBST(my_code_SHARED_LIBADD) // 2nd tells what all files to compile

PHP_NEW_EXTENSION(my_code,my_code.c,$ext_shared)  // $ext_shared is counterpart of PHP_SUBST()

fi

In this case my_code.c is source code file and its content is :

#ifdef HAVE_CONFIG_H

#include “config.h”

#endif

#include “php.h”

#define PHP_MY_CODE_VERSION “1.0”

#define PHP_MY_CODE_EXTNAME “my_code”

extern zend_module_entry my_code_module_entry;

#define phpext_my_code_ptr &my_code_module_entry

// declaration of a custom my_code_function()

PHP_FUNCTION(my_code_function);

// list of custom PHP functions provided by this extension

// set {NULL, NULL, NULL} as the last record to mark the end of list

static function_entry my_code_functions[] = {

PHP_FE(my_code_function, NULL)

{NULL, NULL, NULL}

};

// the following code creates an entry for the module and registers it with Zend.

zend_module_entry my_code_module_entry = {

#if ZEND_MODULE_API_NO >= 20010901

STANDARD_MODULE_HEADER,

#endif

PHP_MY_CODE_EXTNAME,

my_code_functions,

NULL, // name of the MINIT function or NULL if not applicable

NULL, // name of the MSHUTDOWN function or NULL if not applicable

NULL, // name of the RINIT function or NULL if not applicable

NULL, // name of the RSHUTDOWN function or NULL if not applicable

NULL, // name of the MINFO function or NULL if not applicable

#if ZEND

Add to php.ini file

The last thing you need to do is to add the following line to your php.ini to load your extension on PHP startup:

extension=my_code.so

Testing the Extension

You can test your PHP extension by typing the following command:

  1. $ php -r “echo my_code_function();”

Author

  • Prakash P

    Prakash Palki currently works as Module Lead with Trigent Software. Prakash has more than eight years of experience in LAMP. He is especially experienced in building Web Applications using Laravel, CodeIgniter, Drupal, WordPress and so forth.