怎么利用C自定义实现PHP扩展
如何利用C自定义实现PHP扩展
由于有一部分代码需要加解密,所以需要扩展PHP模块,于是简单的使用base64来实现简单的加密算法。因为时间的关系,这里主要是对如何实现PHP扩展做一个概述和记录,并不涉及到加密算法的具体实现,等有空再补上。
1、环境:
centos 5
php 5.1.6
autoconf 2.59
automake 1.96
libtool
bison
flex
re2c
2、创建模块
2.1 转到php源码目录扩展包目录下
cd /usr/include/php/ext
2.2 创建一个叫做itbeing的文件夹(这里我们的模块名称就叫做itbeing了)
mkdir itbeing
cd itbeing
2.3 创建config.m4文件,config.m4 文件使用 GNU autoconf 语法编写,该文件的主要作用是 文件告诉系统构建系统哪些扩展 configure 选项是支持的,你需要哪些扩展库,以及哪些源文件要编译成它的一部分。
- PHP_ARG_ENABLE(itbeing,
- ?? ? ? ?[Whether to enable the "itbeing" extension],
- ?? ? ? ?[? --enable-itbeing? ? ? ?Enable "itbeing" extension support])
- ?
- if test $PHP_ITBEING != "no"; then
- ?? ? ? ?PHP_SUBST(ITBEING_SHARED_LIBADD)
- ?? ? ? ?PHP_NEW_EXTENSION(itbeing, itbeing.c, $ext_shared)
- fi
2.4 创建php_itbeing.h 头文件
- #ifndef PHP_ITBEING_H
- /* Prevent double inclusion */
- #define PHP_ITBEING_H
- ?
- /* Define extension properties */
- #define PHP_ITBEING_EXTNAME "itbeing"
- #define PHP_ITBEING_EXTVER "1.0"
- ?
- /* Import configure options
- ?* when building outside of the
- ?* PHP source tree */
- #ifdef HAVE_CONFIG_H
- #include "config.h"
- #endif
- ?
- /* Include PHP standard Header */
- #include "php.h"
- /*
- ?* define the entry point symbole
- ?* Zend will use when loading this module
- ?*/
- extern zend_module_entry itbeing_module_entry;
- #define phpext_itbeing_ptr &itbeing_module_entry
- ?
- #endif /* PHP_ITBEING_H */
2.5 创建itbeing.c 文件
- #include "php_itbeing.h"
- ?
- PHP_FUNCTION(itbeing_sayhi)
- {
- ?? ? ? ?char *name;
- ?? ? ? ?int name_len;
- ?
- ?? ? ? ?if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
- ?? ? ? ? ? ? ? ?&name, &name_len) == FAILURE)
- ?? ? ? ?{
- ?? ? ? ? ? ? ? ?RETURN_NULL();
- ?? ? ? ?}
- ?
- ?? ? ? ?php_printf("Hi, ");
- ?? ? ? ?PHPWRITE(name, name_len);
- ?? ? ? ?php_printf("!\n");
- }
- ?
- static function_entry php_itbeing_functions[] = {
- ?? ? ? ?PHP_FE(itbeing_sayhi, NULL)
- ?? ? ? ?{ NULL, NULL, NULL }
- };
- ?
- zend_module_entry itbeing_module_entry = {
- #if ZEND_MODULE_API_NO >= 20010901
- ?? ? ? ?STANDARD_MODULE_HEADER,
- #endif
- ?? ? ? ?PHP_ITBEING_EXTNAME,
- ?? ? ? ?php_itbeing_functions, /* Functions */
- ?? ? ? ?NULL, /* MINIT */
- ?? ? ? ?NULL, /* MSHUTDOWN */
- ?? ? ? ?NULL, /* RINIT */
- ?? ? ? ?NULL, /* RSHUTDOWN */
- ?? ? ? ?NULL, /* MINFO */
- #if ZEND_MODULE_API_NO >= 20010901
- ?? ? ? ?PHP_ITBEING_EXTVER,
- #endif
- ?? ? ? ?STANDARD_MODULE_PROPERTIES
- };
- ?
- #ifdef COMPILE_DL_ITBEING
- ZEND_GET_MODULE(itbeing)
- #endif
3、编译模块
3.1 phpize
3.2 ./config -enable-itbeing
3.3 make
3.4 cp modules/itbeing.so /usr/lib/php/modules
3.5 vim /etc/php.ini 添加extension = itbeing.so
测试:php -r “itbeing_sayhi(’kokko’)”
结果:Hi,kokko
?
原文:http://www.kokkowon.com/archives/981

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



In this chapter, we will understand the Environment Variables, General Configuration, Database Configuration and Email Configuration in CakePHP.

PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

To work with date and time in cakephp4, we are going to make use of the available FrozenTime class.

Working with database in CakePHP is very easy. We will understand the CRUD (Create, Read, Update, Delete) operations in this chapter.

To work on file upload we are going to use the form helper. Here, is an example for file upload.

CakePHP is an open-source framework for PHP. It is intended to make developing, deploying and maintaining applications much easier. CakePHP is based on a MVC-like architecture that is both powerful and easy to grasp. Models, Views, and Controllers gu

In this chapter, we are going to learn the following topics related to routing ?

Validator can be created by adding the following two lines in the controller.
