Home Backend Development PHP Tutorial PHP扩展之hello word

PHP扩展之hello word

Jun 23, 2016 pm 02:31 PM

一、下载源码。

先到官网下载PHP的源代码,这里我用的是PHP5.3.5

打开我们可以看到ext这个目录这目录是放所有的扩展的。在改目录下我们可以看到ext_skel的脚本下面我就用这个命令来生成扩展的基本架构。

二、创建基本框架

./ext_skel --extname=example
Copy after login

这个命令会在ext目录下生成一个example目录,改目录下有以下文件

#在目录下有不少文件,testmodule.c 和 config.m4 是最重要的example.c             #是我们扩展的主要文件config.m4                    #m4是一个宏解释工具,用来生成我们扩展的makefileCREDITES                    #这个文件没什么太大的作用,只是用来在发布你的扩展的时候附加一些其他信息EXPERIMENTAL           #这个文件只是标志说,这个扩展是实验性的,所以可以不用管它php_example.h    #这个是我们扩展的头文件tests/001.phpt           #这个也是个测试文件,不过使用的是单元测试,阶段测试
Copy after login

三、实现。

1、修改配置文件config.m4,去掉前面的dnl(dnl在m4文件里表注释)

vi config.m4PHP_ARG_ENABLE(example, whether to enable laiwenhui support,[  --enable-laiwenhui           Enable laiwenhui support])# PHP_ARG_WITH(testmodule, for testmodule support,# Make sure that the comment is aligned:# --with-testmodule             Include testmodule support]) # 这里的with是说明,要启用这个模块,依赖于某些其他模块,这里我们可以暂时不管。# 比如:模块example,如果依赖apxs的话,就需要:# /configure --with-apxs=/usr/local/apache/bin/apxs  --enable-example
Copy after login

2、声明函数

在文件php_example.h文件中编辑

vi php_example.h
Copy after login

我们找到PHP_FUNCTION(confirm_example_compiled); 在其后面添加PHP_FUNCTION(test);

3、实现函数test

vi example.c
Copy after login

把下面代码写到最后面

/** * 我添加的第一个PHP扩展 * * */PHP_FUNCTION(test){    char *str = NULL;    char *arg = NULL;    int arg_len;    int len;//    str = "Hello my first php extention! ^_^";
Copy after login
//len = strlen(str);
Copy after login
//RETURN_STRINGL(str, len, 0); 
Copy after login
//开始想这样写的可以没效果,不知道为什么不行。难道不支持strlen但是能编译通过。    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {        return;    }    len = spprintf(&str, 0, "Hello my first php extention! ^_^ param %s",arg);    RETURN_STRINGL(str, len, 0);}
Copy after login
spprintf应该是php的函数。
Copy after login
zend_parse_parameters是PHP的一个函数表示取得参数解析,如果失败返回。
Copy after login

4、告诉zend引擎这个example模块中有哪些函数。

找到:zend_function_entry testmodule_functions[]这一行,注释的意思是:所有可用的函数必须要在这里面定义。
修改为:

 * Every user visible function must have an entry in example_functions[]. */const zend_function_entry example_functions[] = {        PHP_FE(confirm_example_compiled,        NULL)           /* For testing, remove later. */        PHP_FE(test,    NULL)           /* 我的扩展test */        {NULL,NULL, NULL}       /* Must be the last line in example_functions[] */};/* }}} 
Copy after login


5、编译

进入example模块

./configure ?with-php-config=/usr/local/php/bin/php-config

/usr/local/php/bin/phpize

make

cp modules/example.so /usr/local/php/lib/php/extensions/

然后修改php.ini,让example.so启用,最后重启Web服务

四、测试。

<?php//echo confirm_example_compiled(2);echo test(2);
Copy after login

 

这里有篇鸟哥的文章解释的更清楚。

http://www.laruence.com/2009/04/28/719.html

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 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: How To Unlock Everything In MyRise
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)

Working with Flash Session Data in Laravel Working with Flash Session Data in Laravel Mar 12, 2025 pm 05:08 PM

Laravel simplifies handling temporary session data using its intuitive flash methods. This is perfect for displaying brief messages, alerts, or notifications within your application. Data persists only for the subsequent request by default: $request-

cURL in PHP: How to Use the PHP cURL Extension in REST APIs cURL in PHP: How to Use the PHP cURL Extension in REST APIs Mar 14, 2025 am 11:42 AM

The PHP Client URL (cURL) extension is a powerful tool for developers, enabling seamless interaction with remote servers and REST APIs. By leveraging libcurl, a well-respected multi-protocol file transfer library, PHP cURL facilitates efficient execution of various network protocols, including HTTP, HTTPS, and FTP. This extension offers granular control over HTTP requests, supports multiple concurrent operations, and provides built-in security features.

Simplified HTTP Response Mocking in Laravel Tests Simplified HTTP Response Mocking in Laravel Tests Mar 12, 2025 pm 05:09 PM

Laravel provides concise HTTP response simulation syntax, simplifying HTTP interaction testing. This approach significantly reduces code redundancy while making your test simulation more intuitive. The basic implementation provides a variety of response type shortcuts: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

12 Best PHP Chat Scripts on CodeCanyon 12 Best PHP Chat Scripts on CodeCanyon Mar 13, 2025 pm 12:08 PM

Do you want to provide real-time, instant solutions to your customers' most pressing problems? Live chat lets you have real-time conversations with customers and resolve their problems instantly. It allows you to provide faster service to your custom

Explain the concept of late static binding in PHP. Explain the concept of late static binding in PHP. Mar 21, 2025 pm 01:33 PM

Article discusses late static binding (LSB) in PHP, introduced in PHP 5.3, allowing runtime resolution of static method calls for more flexible inheritance.Main issue: LSB vs. traditional polymorphism; LSB's practical applications and potential perfo

Customizing/Extending Frameworks: How to add custom functionality. Customizing/Extending Frameworks: How to add custom functionality. Mar 28, 2025 pm 05:12 PM

The article discusses adding custom functionality to frameworks, focusing on understanding architecture, identifying extension points, and best practices for integration and debugging.

Framework Security Features: Protecting against vulnerabilities. Framework Security Features: Protecting against vulnerabilities. Mar 28, 2025 pm 05:11 PM

Article discusses essential security features in frameworks to protect against vulnerabilities, including input validation, authentication, and regular updates.

See all articles