编写一个 PHP 扩展是一个相对复杂的任务,需要一定的编程经验和了解 C 语言。以下是一个简单的示例,展示了如何编写一个 PHP 扩展。
首先,创建一个名为 myextension
的文件夹,并在其中创建以下文件:
config.m4
:用于配置扩展的文件。内容如下:PHP_ARG_ENABLE(myextension, whether to enable myextension support,
[ --enable-myextension Enable myextension support])
if test "$PHP_MYEXTENSION" = "yes"; then
AC_DEFINE(HAVE_MYEXTENSION, 1, [Whether you have myextension])
PHP_NEW_EXTENSION(myextension, myextension.c, $ext_shared)
fi
myextension.c
:扩展的主要代码文件。内容如下:#include "php.h"
static function_entry myextension_functions[] = {
PHP_FE(myextension_hello, NULL)
{NULL, NULL, NULL}
};
zend_module_entry myextension_module_entry = {
STANDARD_MODULE_HEADER,
"myextension",
myextension_functions,
NULL,
NULL,
NULL,
NULL,
NULL,
PHP_MINFO(myextension),
PHP_MYEXTENSION_VERSION,
STANDARD_MODULE_PROPERTIES
};
ZEND_GET_MODULE(myextension)
PHP_FUNCTION(myextension_hello)
{
php_printf("Hello, world!\n");
}
PHP_MINFO_FUNCTION(myextension)
{
php_info_print_table_start();
php_info_print_table_row(2, "MyExtension support", "enabled");
php_info_print_table_end();
}
php_myextension.h
:包含扩展的头文件。内容如下:#ifndef PHP_MYEXTENSION_H
#define PHP_MYEXTENSION_H
extern zend_module_entry myextension_module_entry;
#define phpext_myextension_ptr &myextension_module_entry
#define PHP_MYEXTENSION_VERSION "1.0.0"
#ifdef PHP_WIN32
# define PHP_MYEXTENSION_API __declspec(dllexport)
#elif defined(__GNUC__) && __GNUC__ >= 4
# define PHP_MYEXTENSION_API __attribute__ ((visibility("default")))
#else
# define PHP_MYEXTENSION_API
#endif
#ifdef ZTS
#include "TSRM.h"
#endif
PHP_MINIT_FUNCTION(myextension);
PHP_MSHUTDOWN_FUNCTION(myextension);
PHP_RINIT_FUNCTION(myextension);
PHP_RSHUTDOWN_FUNCTION(myextension);
PHP_MINFO_FUNCTION(myextension);
PHP_FUNCTION(myextension_hello);
#endif /* PHP_MYEXTENSION_H */
config.w32
:用于 Windows 平台的配置文件。内容如下:ARG_WITH("myextension", "myextension support", "no");
php_myextension.h
:用于 Unix 平台的配置文件。内容如下:PHP_ARG_WITH(myextension, for myextension support,
[ --with-myextension Include myextension support])
if test "$PHP_MYEXTENSION" != "no"; then
PHP_REQUIRE_CXX()
PHP_SUBST(MYEXTENSION_SHARED_LIBADD)
PHP_ADD_LIBRARY_WITH_PATH(myextension, $ext_builddir, MYEXTENSION_SHARED_LIBADD)
PHP_NEW_EXTENSION(myextension, myextension.cpp, $ext_shared)
fi
然后,运行以下命令来构建和安装扩展:
$ phpize
$ ./configure --enable-myextension
$ make
$ make install
最后,编辑 php.ini
文件,添加以下行:
extension=myextension.so
保存并重新启动 PHP 服务器,你的第一个 PHP 扩展就完成了!你可以在 PHP 代码中使用 myextension_hello
函数来测试它:
<?php
myextension_hello();
?>
运行上述代码,你将会看到输出 Hello, world!
。
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站