php扩展开发实战教程(1)
我的开发环境:
Ubuntu16.04
apt方式安装的php5.6, apache,mysql等
由于我的本机用的是apt方式安装的php,所以我这里从头开始用最精简的方式,编译安装一个php5.4.24的版本
1,下载:wget http://cn2.php.net/get/php-5.4.24.tar.gz/from/this/mirror
2,改个名称: mv mirror php-5.4.24.tar.gz
3,解压: tar xf php-5.4.24.tar.gz
4,编译安装:
cd php-5.4.24/
./configure --prefix=/usr/local/php54
这一步环境检测的时候,我的电脑报错了,找不到libxml2, 所以需要安装libxml2【根据自己电脑实际情况,这里未必跟我的一样】
sudo apt-get install libxml2
sudo apt-get install libxml2-dev
5,重新编译安装
./configure --prefix=/usr/local/php54
make
sudo make install
至此:php5.4编译安装完成,完成之后,可以用/usr/local/php54/bin/php -v查看php的版本号
-------------------------------------------------------------------------------------------------------------------------
开始进入主题:编写一个简单的HelloWorld扩展,掌握php扩展开发的步骤
1,在php源代码里面有个工具ext_skel,他可以帮我们生成扩展框架
ghostwu@ghostwu:~/software/php-5.4.$ cd ext/
ghostwu@ghostwu:~/software/php-5.4./ext$ ls -l
-rwxr-xr-x ghostwu ghostwu 1月 ext_skel
......
查看ext_skel的帮助
ghostwu@ghostwu:~/software/php-5.4./ext$ ./ext_skel --help
2,生成HelloWorld扩展,我给他起个名字叫nihao,这个nihao就是扩展的名称
ghostwu@ghostwu:~/software/php-5.4./ext$ ./ext_skel --extname=nihao
Creating directory nihao
Creating basic files: config.m4 config.w32 .svnignore nihao.c php_nihao.h CREDITS EXPERIMENTAL tests/.phpt nihao.php [done]. To use your new extension, you will have to execute the following steps: . $ cd ..
. $ vi ext/nihao/config.m4
. $ ./buildconf
. $ ./configure --[with|enable]-nihao
. $ make
. $ ./php -f ext/nihao/nihao.php
. $ vi ext/nihao/nihao.c
. $ make Repeat steps - until you are satisfied with ext/nihao/config.m4 and
step confirms that your module is compiled into PHP. Then, start writing
code and repeat the last two steps as often as necessary.
3,用ls -lt按最新时间查看,就能找到刚才为nihao这个扩展生成了一个叫nihao的目录,同时下面会有一些重要的文件
ghostwu@ghostwu:~/software/php-5.4./ext$ ls -lt
total
drwxr-xr-x ghostwu ghostwu 2月 : nihao
.....
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ ls -l
total
-rw-r--r-- ghostwu ghostwu 2月 : config.m4
-rw-r--r-- ghostwu ghostwu 2月 : config.w32
-rw-r--r-- ghostwu ghostwu 2月 : CREDITS
-rw-r--r-- ghostwu ghostwu 2月 : EXPERIMENTAL
-rw-r--r-- ghostwu ghostwu 2月 : nihao.c
-rw-r--r-- ghostwu ghostwu 2月 : nihao.php
-rw-r--r-- ghostwu ghostwu 2月 : php_nihao.h
drwxr-xr-x ghostwu ghostwu 2月 : tests
4,配置文件config.m4
PHP_ARG_WITH(nihao, for nihao support,
Make sure that the comment is aligned:
[ --with-nihao Include nihao support])
把这个文件中,上述3行前面的dnl去掉
5,用vim编辑php_nihao.h,把函数名改成nihao
PHP_FUNCTION(nihao); /* For testing, remove later. */
6,修改函数名以及函数体,找到.c源文件(vim nihao.c),修改函数体,打印hello,ghostwu!,至此,一个简单的扩展就写好了
* Every user visible function must have an entry in nihao_functions[].
*/
const zend_function_entry nihao_functions[] = {
PHP_FE(nihao, NULL) /* For testing, remove later. */
PHP_FE_END /* Must be the last line in nihao_functions[] */
};
/* }}} */
PHP_FUNCTION(nihao)
{
php_printf( "hello ghostwu!\n" );
RETURN_TRUE;
}
7,用phpize生成外挂模块
如果这里少了autoconf,你要去安装额( sudo apt install m4,sudo apt install autoconf),还是那句话,灵活应变,少了什么东西,自己百度安装额,因为每台电脑的情况
都不一样额,如果安装东西这关没有过,说明你的linux基础不行额,赶紧去补充基础额
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ /usr/local/php54/bin/phpize
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
8,编译,安装模块
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ ./configure --with-php-config=\
> /usr/local/php54/bin/php-config
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
........
注意--with-php-config后面等号那个\,是另起一行的意思额,就是一行写不下那么多命令,用\另起一行
这部执行完成之后,生成modules目录了,这里面存放的就是编译之后的模块,这一步还是空的,么有生成任何东西额,因为没有make
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ make
.....
Build complete.
Don't forget to run 'make test'.
......
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ ls -l modules/
total
-rw-rw-r-- ghostwu ghostwu 2月 : nihao.la
-rwxrwxr-x ghostwu ghostwu 2月 : nihao.so
make完成之后,就能看见modules下面生成了nihao这个扩展了,然后sudo make install安装扩展
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ sudo make install
[sudo] password for ghostwu:
Installing shared extensions: /usr/local/php54/lib/php/extensions/no-debug-non-zts-/
你会发现扩展安装到这个目录了: /usr/local/php54/lib/php/extensions/no-debug-non-zts-20100525/
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ sudo make install
[sudo] password for ghostwu:
Installing shared extensions: /usr/local/php54/lib/php/extensions/no-debug-non-zts-/
ghostwu@ghostwu:~/software/php-5.4./ext/nihao$ cd /usr/local/php54/lib/php/extensions/no-debug-non-zts-/
ghostwu@ghostwu:/usr/local/php54/lib/php/extensions/no-debug-non-zts-$ ls
nihao.so
最后一步:在php.ini中加载扩展,从源码包拷贝一个.ini文件到安装目录
ghostwu@ghostwu:~/software/php-5.4.$ sudo cp php.ini-production /usr/local/php54/lib/php.ini
ghostwu@ghostwu:~/php/ext_dev$ sudo vim /usr/local/php54/lib/php.ini
ghostwu@ghostwu:~/php/ext_dev$ tail - /usr/local/php54/lib/php.ini
[nihao]
extension=nihao.so
ghostwu@ghostwu:~/php/ext_dev$ /usr/local/php54/bin/php -f nihao.php
hello ghostwu!
ghostwu@ghostwu:~/php/ext_dev$ cat -n nihao.php
<?php
nihao();
?>
从中,你可以看出nihao()这个扩展已经执行成功了
php扩展开发实战教程(1)的更多相关文章
- Swift游戏开发实战教程(霸内部信息大学)
Swift游戏开发实战教程(大学霸内部资料) 试读下载地址:http://pan.baidu.com/s/1sj7DvQH 介绍:本教程是国内第一本Swift游戏开发专向资料. 本教程具体解说记忆配对 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发4- 后台模板html页面创建
上一篇教程<asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发>完成了本项目的登录模块,登录后就需要进入后台管理首页了,需要准备一个后台模 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发2-Model层建立
上篇(asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作)文章讲解了开发过程中的准备工作,主要创建了项目数据库及项目,本文主要讲解项目M层的实现,M层这里 ...
- 微信小程序-云开发实战教程
微信小程序-云开发实战教程 云函数,云存储,云数据库,云调用 https://developers.weixin.qq.com/miniprogram/dev/wxcloud/basis/gettin ...
- Python开发实战教程(8)-向网页提交获取数据
来这里找志同道合的小伙伴!↑↑↑ Python应用现在如火如荼,应用范围很广.因其效率高开发迅速的优势,快速进入编程语言排行榜前几名.本系列文章致力于可以全面系统的介绍Python语言开发知识和相关知 ...
- React Native Android原生模块开发实战|教程|心得|怎样创建React Native Android原生模块
尊重版权,未经授权不得转载 本文出自:贾鹏辉的技术博客(http://blog.csdn.net/fengyuzhengfan/article/details/54691503) 告诉大家一个好消息. ...
- Chrome扩展开发基础教程(附HelloWorld)
1 概述 Chrome扩展开发的基础教程,代码基于原生JS+H5,教程内容基于谷歌扩展开发官方文档. 2 环境 Chrome 88.0.4324.96 Chromium 87.0.4280.141 B ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发3-登录模块开发
进行本文之前需要在数据库用户表里面增加一条用户数据,直接手动添加即可,未安全考虑密码一定要使用Md5加密后的,这里提供666666的Md5密文为(c831b04de153469d),本文完成登录模块的 ...
- asp.net mvc+jquery easyui开发实战教程之网站后台管理系统开发1-准备工作
/****** Object: 新闻表 Script Date: 2017/9/2 星期六 15:11:12 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENT ...
随机推荐
- TP传输的两种模式
主动模式(active): 我们知道,FTP是由TCP封包的模式连接,TCP 这种封包由于需要经过 Server 端与 Client 端两边的『三次握手』之后,才能确定联机,也就是需要执行AC ...
- sqlite入门基础(一):sqlite3_open,sqlite3_exec,slite3_close
打开数据库链接sqlite3_open用法 原型: int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sq ...
- jQuery 函数位于一个 document ready 函数中
在我们的实例中的所有 jQuery 函数位于一个 document ready 函数中: $(document).ready(function(){ --- jQuery functions go h ...
- Tomcat下的Server.xml配置文件详解
自15年毕业到现在已经入行两年多了,一直以来没有深入的了解过tomcat的详细配置,只懂修改一下端口号.在网上找了些相关资料来支撑这篇文章,深入了解server.xml文件各配置的作用 <?xm ...
- 无法打开物理文件 操作系统错误 5:拒绝访问 SQL Sever
今天分离附加数据库,分离出去然后再附加,没有问题.但是一把.mdf文件拷到其它文件夹下就出错,错误如下: 无法打开物理文件 "E:\db\homework.mdf".操作系统 ...
- 一次线上tomcat应用请求阻塞的排查经过
今天早上,收到一个报警,有个服务器的http往返时延飙升,同时曝出大量404,很是折腾了一番,特记录下思考和排查经过. 1.这是单纯的时延增大,还是有什么其他情况还未掌握? 因为不知道是只有时延变大而 ...
- 使用 ServiceAnt 更好地解耦你的程序
今天要厚着脸皮给大家推荐一个自己做的通信中间件--ServiceAnt,目前已经在我们团队的两个产品线上投入了使用. ServiceAnt是什么 它最初的定位是ESB(企业服务总线),但目前还没有达到 ...
- [转]linux下centos服务器安全设置
引言: 我们必须明白:最小的权限+最少的服务=最大的安全 所以,无论是配置任何服务器,我们都必须把不用的服务关闭.把系统权限设置到最小话,这样才能保证服务器最大的安全.下面是CentOS服务器安全设置 ...
- cookie sessionStorage localStorage 之间的关系
先说一个cookie 因为HTTP是无状态的 所以cookie诞生 用于保存会话信息 大小 4096b 一般在4095b以内 数量限制 20 -50 根据浏览器不同 操作的是一个字符串 可以设置参数 ...
- Node.js之事件监听和发送
演示事件的发送和监听 const events = require("events"); function Account() { this.balance = 0; events ...