Home Backend Development PHP Tutorial how to write a php extension

how to write a php extension

Jun 27, 2017 am 09:16 AM
php how Expand write

The construction of each PHP extension requires at least two files: a configuration file, which tells the compile time which files to build and what external libraries are required, and at least one source file, which performs the actual work.

Dissecting an Extension

In fact, there will usually be a second or third configuration file, and one or more header files. For your first extension, you will need Add one file of each type and work with them.

Configuration files

To get started, first create a directory called sample in the ext/ directory of your PHP source tree . Actually this new directory can be placed anywhere, but in order to demonstrate win32 and static build options later in this chapter, we will create it in the source code directory first.

Next step, enter this directory and create A file named config.m4, type the following content:

1

2

3

4

5

6

7

8

PHP_ARG_ENABLE(sample, 

  [Whether to enable the "sample" extension], 

  [  enable-sample        Enable "sample" extension support]) 

       

if test $PHP_SAMPLE != "no"; then 

  PHP_SUBST(SAMPLE_SHARED_LIBADD) 

  PHP_NEW_EXTENSION(sample, sample.c, $ext_shared

fi

Copy after login

This is the minimum requirement to be able to call the enable-sample option during ./configure. The second parameter of PHP_ARG_ENABLE will be used during ./configure processing Displayed when reaching the configuration file of this extension. The third parameter will be displayed as a help message when the terminal user executes ./configure --help.

Have you ever wondered why some extension configurations use enable-extname? Some extensions use with-extname? There is no functional difference between the two. In fact, enable means that enabling this feature does not require any other third-party libraries. In contrast, with means that there are other prerequisites for using this feature.

Now, your sample extension does not need to be linked with other libraries, so you only need to use the enable version. In Chapter 17 "External Libraries", we will introduce using with and instruct the compiler to use additional CFLAGS and LDFLAGS settings.

If the end user calls ./configure with the enable-sample option, then the local environment variable$PHP_SAMPLE, will be set to yes. PHP_SUBST() is a standard autoconf PHP modified version of the AC_SUBST() macro, which is required when building an extension as a shared module.

Last but not least, PHP_NEW_EXTENSION() defines the module and enumerates all that must be used as an extension A portion of compiled source files. If multiple files are needed, it can be enumerated using spaces in the second parameter, for example:

PHP_NEW_EXTENSION(sample, sample.c sample2.c sample3.c, $ext_shared)

The last parameter corresponds to the PHP_SUBST (SAMPLE_SHARED_LIBADD) command, which is also needed when building a shared module.

Header file

When developing in C, It is common practice to isolate data type definitions in external header files and include them in source files. Although PHP does not require this, it can simplify things when the module grows to the point where it cannot be placed in a single source file. .

In your php_sample.h header file, start with the following:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#ifndef PHP_SAMPLE_H 

/* 防止重复包含 */

#define PHP_SAMPLE_H 

       

/* 定义扩展的属性 */

#define PHP_SAMPLE_EXTNAME    "sample" 

#define PHP_SAMPLE_EXTVER    "1.0" 

       

/* 在php源码树外面构建时引入配置选项 */

#ifdef HAVE_CONFIG_H 

#include "config.h" 

#endif 

       

/* 包含php的标准头文件 */

#include "php.h" 

       

/* 定义入口点符号, Zend在加载这个模块的时候使用 */

extern zend_module_entry sample_module_entry; 

#define phpext_sample_ptr &sample_module_entry 

       

#endif /* PHP_SAMPLE_H */

Copy after login

This header file accomplishes two main tasks: If the extension is built using the phpize tool (this book usually All use this method), then HAVE_CONFG_H is defined, so config.h will be included normally. No matter how the extension is compiled, php.h will be included from the php source tree. This header file contains the php source code Other header files used to access most PHPAPI.

Next, define the zend_module_entry structure used by your extension as external, so that when this module is loaded using extension=xxx, it can be used by Zend dlopen and dlsym().

The header file will also contain some preprocessing to define the information that will be used in the original file.

Source code

Finally, the most important You need to create a simple source code skeleton in sample.c:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

#include "php_sample.h" 

       

zend_module_entry sample_module_entry = { 

#if ZEND_MODULE_API_NO >= 20010901 

     STANDARD_MODULE_HEADER, 

#endif 

    PHP_SAMPLE_EXTNAME, 

    NULL, /* Functions */

    NULL, /* MINIT */

    NULL, /* MSHUTDOWN */

    NULL, /* RINIT */

    NULL, /* RSHUTDOWN */

    NULL, /* MINFO */

#if ZEND_MODULE_API_NO >= 20010901 

    PHP_SAMPLE_EXTVER, 

#endif 

    STANDARD_MODULE_PROPERTIES 

}; 

       

#ifdef COMPILE_DL_SAMPLE 

ZEND_GET_MODULE(sample) 

#endif

Copy after login

The above is the detailed content of how to write a php extension. For more information, please follow other related articles on the PHP Chinese website!

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

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

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)

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

7 PHP Functions I Regret I Didn't Know Before 7 PHP Functions I Regret I Didn't Know Before Nov 13, 2024 am 09:42 AM

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

How To Set Up Visual Studio Code (VS Code) for PHP Development How To Set Up Visual Studio Code (VS Code) for PHP Development Dec 20, 2024 am 11:31 AM

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Explain JSON Web Tokens (JWT) and their use case in PHP APIs. Apr 05, 2025 am 12:04 AM

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

How do you parse and process HTML/XML in PHP? How do you parse and process HTML/XML in PHP? Feb 07, 2025 am 11:57 AM

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

PHP Program to Count Vowels in a String PHP Program to Count Vowels in a String Feb 07, 2025 pm 12:12 PM

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Explain late static binding in PHP (static::). Explain late static binding in PHP (static::). Apr 03, 2025 am 12:04 AM

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? What are PHP magic methods (__construct, __destruct, __call, __get, __set, etc.) and provide use cases? Apr 03, 2025 am 12:03 AM

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.

See all articles