Попытка написать расширение для PHP (PHP extension)
Для компиляции расширения использовал утилиту phpize.
Если у Вас при вводе
# phpize
Выдается:
-bash: phpize: command not found
или:
Can't find PHP headers in /usr/include/php
The php-devel package is required for use of this command.
Это значит, что утилита не установлена.
phpize идет вместе с комплектом php-devel, который и нужно установить, чтобы данная утилита стала для Вас доступной.
Debian (или ubuntu):
$ sudo aptitude install php5-dev |
CentOS (или RedHat):
$ sudo yum install php-devel |
$ sudo yum install php53-devel |
Далее нужно создать директорию с тремя файлами.
-
Конфигурационный файл (config.m4)
- этот файл используемый утилитой phpize для подготовки расширения к компиляции:
PHP_ARG_ENABLE(hello, whether to enable Hello World support, [ --enable-hello Enable Hello World support]) if test "$PHP_HELLO" = "yes"; then AC_DEFINE(HAVE_HELLO, 1, [Whether you have Hello World]) PHP_NEW_EXTENSION(hello, hello.c, $ext_shared) fi
-
Заголовочный файл (php_hello.h), содержащий указания, используемые PHP для загрузки расширений:
#ifndef PHP_HELLO_H #define PHP_HELLO_H 1 #define PHP_HELLO_WORLD_VERSION "1.0" #define PHP_HELLO_WORLD_EXTNAME "hello" PHP_FUNCTION(hello_world); extern zend_module_entry hello_module_entry; #define phpext_hello_ptr &hello_module_entry #endif
- файл с исходниками (hello.c), содержащий тело функции hello_world:
#ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include "php_hello.h" static function_entry hello_functions[] = { PHP_FE(hello_world, NULL) {NULL, NULL, NULL} }; zend_module_entry hello_module_entry = { #if ZEND_MODULE_API_NO >= 20010901 STANDARD_MODULE_HEADER, #endif PHP_HELLO_WORLD_EXTNAME, hello_functions, NULL, NULL, NULL, NULL, NULL, #if ZEND_MODULE_API_NO >= 20010901 PHP_HELLO_WORLD_VERSION, #endif STANDARD_MODULE_PROPERTIES }; #ifdef COMPILE_DL_HELLO ZEND_GET_MODULE(hello) #endif PHP_FUNCTION(hello_world) { RETURN_STRING("Hello World", 1); }
Теперь нужно скомпилировать расширение:
1 |
$ phpize
$ ./configure --enable-hello
$ make |
Далее нужно поместить файл расширения в предназначенную для этого директорию.
Если Вы не знаете расположение этой папки (или папок), то можно запустить phpinfo() и посмотреть значение директивы extension_dir
Пример использования расширения из php скрипта:
dl('hello.so'); echo hello_world().'<br>'; |