Home Backend Development PHP Tutorial 怎么利用C自定义实现PHP扩展

怎么利用C自定义实现PHP扩展

Jun 13, 2016 am 11:00 AM
entry module null 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 选项是支持的,你需要哪些扩展库,以及哪些源文件要编译成它的一部分。

  1. PHP_ARG_ENABLE(itbeing,
  2. ?? ? ? ?[Whether to enable the "itbeing" extension],
  3. ?? ? ? ?[? --enable-itbeing? ? ? ?Enable "itbeing" extension support])
  4. ?
  5. if test $PHP_ITBEING != "no"; then
  6. ?? ? ? ?PHP_SUBST(ITBEING_SHARED_LIBADD)
  7. ?? ? ? ?PHP_NEW_EXTENSION(itbeing, itbeing.c, $ext_shared)
  8. fi

2.4 创建php_itbeing.h 头文件

  1. #ifndef PHP_ITBEING_H
  2. /* Prevent double inclusion */
  3. #define PHP_ITBEING_H
  4. ?
  5. /* Define extension properties */
  6. #define PHP_ITBEING_EXTNAME "itbeing"
  7. #define PHP_ITBEING_EXTVER "1.0"
  8. ?
  9. /* Import configure options
  10. ?* when building outside of the
  11. ?* PHP source tree */
  12. #ifdef HAVE_CONFIG_H
  13. #include "config.h"
  14. #endif
  15. ?
  16. /* Include PHP standard Header */
  17. #include "php.h"
  18. /*
  19. ?* define the entry point symbole
  20. ?* Zend will use when loading this module
  21. ?*/
  22. extern zend_module_entry itbeing_module_entry;
  23. #define phpext_itbeing_ptr &itbeing_module_entry
  24. ?
  25. #endif /* PHP_ITBEING_H */

2.5 创建itbeing.c 文件

  1. #include "php_itbeing.h"
  2. ?
  3. PHP_FUNCTION(itbeing_sayhi)
  4. {
  5. ?? ? ? ?char *name;
  6. ?? ? ? ?int name_len;
  7. ?
  8. ?? ? ? ?if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
  9. ?? ? ? ? ? ? ? ?&name, &name_len) == FAILURE)
  10. ?? ? ? ?{
  11. ?? ? ? ? ? ? ? ?RETURN_NULL();
  12. ?? ? ? ?}
  13. ?
  14. ?? ? ? ?php_printf("Hi, ");
  15. ?? ? ? ?PHPWRITE(name, name_len);
  16. ?? ? ? ?php_printf("!\n");
  17. }
  18. ?
  19. static function_entry php_itbeing_functions[] = {
  20. ?? ? ? ?PHP_FE(itbeing_sayhi, NULL)
  21. ?? ? ? ?{ NULL, NULL, NULL }
  22. };
  23. ?
  24. zend_module_entry itbeing_module_entry = {
  25. #if ZEND_MODULE_API_NO >= 20010901
  26. ?? ? ? ?STANDARD_MODULE_HEADER,
  27. #endif
  28. ?? ? ? ?PHP_ITBEING_EXTNAME,
  29. ?? ? ? ?php_itbeing_functions, /* Functions */
  30. ?? ? ? ?NULL, /* MINIT */
  31. ?? ? ? ?NULL, /* MSHUTDOWN */
  32. ?? ? ? ?NULL, /* RINIT */
  33. ?? ? ? ?NULL, /* RSHUTDOWN */
  34. ?? ? ? ?NULL, /* MINFO */
  35. #if ZEND_MODULE_API_NO >= 20010901
  36. ?? ? ? ?PHP_ITBEING_EXTVER,
  37. #endif
  38. ?? ? ? ?STANDARD_MODULE_PROPERTIES
  39. };
  40. ?
  41. #ifdef COMPILE_DL_ITBEING
  42. ZEND_GET_MODULE(itbeing)
  43. #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

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

CakePHP Project Configuration CakePHP Project Configuration Sep 10, 2024 pm 05:25 PM

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

PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian PHP 8.4 Installation and Upgrade guide for Ubuntu and Debian Dec 24, 2024 pm 04:42 PM

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

CakePHP Date and Time CakePHP Date and Time Sep 10, 2024 pm 05:27 PM

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

CakePHP Working with Database CakePHP Working with Database Sep 10, 2024 pm 05:25 PM

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

CakePHP File upload CakePHP File upload Sep 10, 2024 pm 05:27 PM

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

Discuss CakePHP Discuss CakePHP Sep 10, 2024 pm 05:28 PM

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

CakePHP Routing CakePHP Routing Sep 10, 2024 pm 05:25 PM

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

CakePHP Creating Validators CakePHP Creating Validators Sep 10, 2024 pm 05:26 PM

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

See all articles