PHP扩展之hello word
一、下载源码。
先到官网下载PHP的源代码,这里我用的是PHP5.3.5
打开我们可以看到ext这个目录这目录是放所有的扩展的。在改目录下我们可以看到ext_skel的脚本下面我就用这个命令来生成扩展的基本架构。
二、创建基本框架
./ext_skel --extname=example
这个命令会在ext目录下生成一个example目录,改目录下有以下文件
#在目录下有不少文件,testmodule.c 和 config.m4 是最重要的example.c #是我们扩展的主要文件config.m4 #m4是一个宏解释工具,用来生成我们扩展的makefileCREDITES #这个文件没什么太大的作用,只是用来在发布你的扩展的时候附加一些其他信息EXPERIMENTAL #这个文件只是标志说,这个扩展是实验性的,所以可以不用管它php_example.h #这个是我们扩展的头文件tests/001.phpt #这个也是个测试文件,不过使用的是单元测试,阶段测试
三、实现。
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
2、声明函数
在文件php_example.h文件中编辑
vi php_example.h
3、实现函数test
vi example.c
把下面代码写到最后面
/** * 我添加的第一个PHP扩展 * * */PHP_FUNCTION(test){ char *str = NULL; char *arg = NULL; int arg_len; int len;// str = "Hello my first php extention! ^_^";
//len = strlen(str);
//RETURN_STRINGL(str, len, 0);
//开始想这样写的可以没效果,不知道为什么不行。难道不支持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);}
spprintf应该是php的函数。
zend_parse_parameters是PHP的一个函数表示取得参数解析,如果失败返回。
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[] */};/* }}}
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);
这里有篇鸟哥的文章解释的更清楚。
http://www.laruence.com/2009/04/28/719.html

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



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-

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.

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' =>

Alipay PHP...

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

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

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

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