php扩展怎么写

1. 如何写php扩展

PHP取得成功的一个主要原因之一是她拥有大量的可用扩展。web开发者无论有何种需求,这种需求最有可能在PHP发行包里找到。PHP发行包包括支持各种数据库,图形文件格式,压缩,XML技术扩展在内的许多扩展。

扩展API的引入使PHP3取得了巨大的进展,扩展API机制使PHP开发社区很容易的开发出几十种扩展。现在,两个版本过去了,API仍然和PHP3时的非常相似。扩展主要的思想是:尽可能的从扩展编写者那里隐藏PHP的内部机制和脚本引擎本身,仅仅需要开发者熟悉API。

有两个理由需要自己编写PHP扩展。第一个理由是:PHP需要支持一项她还未支持的技术。这通常包括包裹一些现成的C函数库,以便提供PHP接口。例如,如果一个叫FooBase的数据库已推出市场,你需要建立一个PHP扩展帮助你从PHP里调用FooBase的C函数库。这个工作可能仅由一个人完成,然后被整个PHP社区共享(如果你愿意的话)。第二个不是很普遍的理由是:你需要从性能或功能的原因考虑来编写一些商业逻辑。

如果以上的两个理由都和你没什么关系,同时你感觉自己没有冒险精神,那么你可以跳过本章。

本章教你如何编写相对简单的PHP扩展,使用一部分扩展API函数。对于大多数打算开发自定义PHP扩展开发者而言,它含概了足够的资料。学习一门编程课程的最好方法之一就是动手做一些极其简单的例子,这些例子正是本章的线索。一旦你明白了基础的东西,你就可以在互联网上通过阅读文挡、原代码或参加邮件列表新闻组讨论来丰富自己。因此,本章集中在让你如何开始的话题。在UNIX下一个叫ext_skel的脚本被用于建立扩展的骨架,骨架信息从一个描述扩展接口的定义文件中取得。因此你需要利用UNIX来建立一个骨架。Windows开发者可以使用Windows ext_skel_win32.php代替ext_skel。

然而,本章关于用你开发的扩展编译PHP的指导仅涉及UNIX编译系统。本章中所有的对API的解释与UNIX和Windows下开发的扩展都有联系。

2. 如何编写一个PHP的C扩展

一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13#> cd /software/php-5.2.13/ext二、假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:a--处理两个整型相加和b-处理字符串重复输出;1、首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.defint a(int x, int y)string b(string str, int n)2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module#> ./ext_skel --extname=caleng_module --proto=caleng_module.def3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签"dnl"去掉,修改后如下所示:PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,Make sure that the comment is aligned:[ --enable-myfunctions Enable myfunctions support])4、完善函数a和b的功能: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.cPHP_FUNCTION(a){int x, y, z;int argc = ZEND_NUM_ARGS();if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE)return;z = x + y;RETURN_LONG(z);}PHP_FUNCTION(b){char *str = NULL;int argc = ZEND_NUM_ARGS();int str_len;long n;char *result;char *ptr;int result_length;if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE)return;result_length = str_len * n;result = (char *) emalloc(result_length + 1);ptr = result;while (n--) {memcpy(ptr, str, str_len);ptr += str_len;}*ptr = '\0';RETURN_STRINGL(result, result_length, 0);}三、编译安装,假设php的安装目录为:/usr/localhost/webserver/php#> cd /software/php-5.2.13/ext/caleng_module#> /usr/localhost/webserver/php/bin/phpize#> ./configure --with-php-config=/usr/localhost/webserver/php/bin/php-config#> make#> make install现在将在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目录下生成caleng_module.so文件在php.ini配置文件中加入: extension=caleng_module.so.搞定收工。

3. 如何编写一个独立的 PHP 扩展

一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13#> cd /software/php-5.2.13/ext二、假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:a--处理两个整型相加和b-处理字符串重复输出;1、首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.defint a(int x, int y)string b(string str, int n)2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module#> ./ext_skel --extname=caleng_module --proto=caleng_module.def3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签"dnl"去掉,修改后如下所示:PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,Make sure that the comment is aligned:[ --enable-myfunctions Enable myfunctions support])4、完善函数a和b的功能: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.cPHP_FUNCTION(a){int x, y, z;。

4. 如何用C语言编写PHP扩展的详解

1:预定义在home目录,也可以其他任意目录,写一个文件,例如caleng_module.def内容是你希望定义的函数名以及参数:int a(int x,int y)string b(string str,int n)2:到php源码目录的ext目录#cd /usr/local/php-5.4.0/ext/执行命令,生成对应扩展目录#./ext_skel --extname=caleng_module --proto=/home/hm/caleng_module.def3:修改config.m4去掉dnl的注释 PHP_ARG_ENABLE(caleng_module, whether to enable caleng_module support,Make sure that the comment is aligned:[ --enable-caleng_module Enable caleng_module support])4:修改caleng_module.c 代码如下: /* {{{ proto int a(int x, int y) */PHP_FUNCTION(a){ int argc = ZEND_NUM_ARGS(); int x; int y; int z; if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE) return;z=x+y; RETURN_LONG(z);}/* }}} *//* {{{ proto string b(string str, int n) */PHP_FUNCTION(b){ char *str = NULL; int argc = ZEND_NUM_ARGS(); int str_len; long n; char *result; char *ptr; int result_length; if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) return; result_length = str_len * n; result = (char *) emalloc(result_length + 1); ptr = result; while (n--) { memcpy(ptr, str, str_len); ptr += str_len; } *ptr = '\0'; RETURN_STRINGL(result, result_length, 0);}/* }}} */ 5:生成扩展库#cd ./caleng_module#/usr/local/php/bin/phpize#./configure --with-php-config=/usr/local/php/bin/php-config#make#make install 6:到php的对应extensions目录如上图所示#cd /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/改目录下有生成的caleng_module.so文件7:修改php.iniphp.ini如果找不到可以从phpinfo()打出的信息看到#cd /usr/local/php/lib/php.ini增加扩展信息extension=caleng_module.so8:重启Apache# /usr/local/apache2/bin/apachectl restart9:检查加载 /usr/local/php/bin/php -m10:PHP调用 代码如下: echo a(1,2); 输出 3 就说明成功了!下面是原文Linux下用C开发PHP扩展一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13 一、首先下载PHP源码包,假设源码包目录为:/software/php-5.2.13#> cd /software/php-5.2.13/ext二、假设我们要开发一个名为caleng_module的扩展,该扩展包含两个函数:a--处理两个整型相加和b-处理字符串重复输出;1、首先编写一个函数定义文件,该文件编写函数原型后缀为def,假设为:caleng_module.defint a(int x, int y)string b(string str, int n)2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module#> ./ext_skel --extname=caleng_module --proto=caleng_module.def3、修改配置文件: #> vim /software/php-5.2.13/ext/caleng_module/config.m4,将如下行的注释标签"dnl"去掉,修改后如下所示:PHP_ARG_ENABLE(myfunctions, whether to enable myfunctions support,Make sure that the comment is aligned:[ --enable-myfunctions Enable myfunctions support])4、完善函数a和b的功能: #> vim /software/php-5.2.13/ext/caleng_module/caleng_module.cPHP_FUNCTION(a){ int x, y, z; int argc = ZEND_NUM_ARGS(); if (zend_parse_parameters(argc TSRMLS_CC, "ll", &x, &y) == FAILURE) return; z = x + y; RETURN_LONG(z);}PHP_FUNCTION(b){ char *str = NULL; int argc = ZEND_NUM_ARGS(); int str_len; long n; char *result; char *ptr; int result_length; if (zend_parse_parameters(argc TSRMLS_CC, "sl", &str, &str_len, &n) == FAILURE) return; result_length = str_len * n; result = (char *) emalloc(result_length + 1); ptr = result; while (n--) { memcpy(ptr, str, str_len); ptr += str_len; } *ptr = '\0'; RETURN_STRINGL(result, result_length, 0);}三、编译安装,假设php的安装目录为:/usr/localhost/webserver/php#> cd /software/php-5.2.13/ext/caleng_module#> /usr/localhost/webserver/php/bin/phpize#> ./configure --with-php-config=/usr/localhost/webserver/php/bin/php-config#> make#> make install现在将在/usr/local/webserver/php/lib/php/extensions/no-debug-non-zts-20060613目录下生成caleng_module.so文件在php.ini配置文件中加入: extension=caleng_module.so.。

5. windows上用c写php扩展怎么解决

如何使用C语言开发PHP扩展。

函数功能:php里面的整数是有符号数,其内部实现其实就是long,不是unsigned long。对于32位机器来说,php最大能表示的整数就是2^31-1了,一般在应用中碰到大于2^31-1而小于2^32的数就只能用字符串来表示了。

对于mixed int_ext(string in)来说,如果字符串in表示的整数小于2^31-1,那么就返回整数,如果大于就返回字符串。 开发扩展步骤如下:(首先需要下载php的源码,这里下载的是php-5.3.14) 1,建立扩展骨架 [plain] view plaincopyprint? 01.cd php-5.3.14/ext 02../ext_skel --extname=int_ext cd php-5.3.14/ext ./ext_skel --extname=int_ext 2,修改编译参数。

php扩展怎么写

转载请注明出处育才学习网 » php扩展怎么写

知识

销售营销方案怎么写

阅读(197)

本文主要为您介绍销售营销方案怎么写,内容包括营销方案怎么写,销售方案怎么写或者怎么做销售,销售方案怎么写。原发布者:戈哦abd市场营销策划方案导读:本文是关于市场营销策划方案的文章,如果觉得很不错,欢迎点评和分享! 【篇一:市场营销策划方案

知识

节省的拼音怎么写

阅读(246)

本文主要为您介绍节省的拼音怎么写,内容包括节省的另一个读音可以组什么词,节省的近义词怎么写,节省/不省人事的拼音。省拼 音 shěng xǐng 基本释义 [ shěng ]1.地方行政区域:~份。~会。2.节约,不费:~钱。~事。~吃俭用。3.简易

知识

原来拼音怎么写的

阅读(267)

本文主要为您介绍原来拼音怎么写的,内容包括原来的原的拼音,原来的原字怎么写,回来的汉语拼音怎么写。拼音:huí lái声母:h、l韵母:ui、ai声调bai:阳平、阳平意思:归来。引证:清·吴敬梓《儒林外史》第一回:du“ 王冕正从母

知识

意字行书怎么写

阅读(317)

本文主要为您介绍意字行书怎么写,内容包括意字行书怎么写,是字的行书怎么写,“出”字行书的写法怎么写。第一讲右点的写法写法要领:右点不宜写长,要圆润饱满、坚定肯切,忌用枯笔。第二讲左点的写法写法要领:左点一般露锋入笔形体稍长,和其它笔画

知识

zu怎么写

阅读(184)

本文主要为您介绍zu怎么写,内容包括zu字怎么写,家zu的zu怎么写,zu渐的zu怎么写。汉字"左"在田字格中写法如下:左,拼音读作zuǒ,英文为Left含义有:面向南时,东的一边,与“右”相对:左手,左膀右臂;地理上指东方:

知识

中国禁毒怎么写评语

阅读(176)

本文主要为您介绍中国禁毒怎么写评语,内容包括禁毒征文的评语怎么写,珍惜生命远离毒品作文评语怎么写,禁毒心得怎么写。常言说:“生命只有一次,一旦失去,就无法挽回.”然而,有些人却不把生命当一回事,在毒品的虚幻梦境中,不知不觉地断送了自己宝

知识

553的竖式怎么写

阅读(238)

本文主要为您介绍553的竖式怎么写,内容包括5除以3的竖式怎么写,5除3竖式怎么写,5除以3的竖式怎么写。355除以5的竖式计算如下:

知识

粉笔字写的怎么办

阅读(193)

本文主要为您介绍粉笔字写的怎么办,内容包括用粉笔写的字怎么洗,怎样才能写好粉笔字,怎么提高自己写粉笔字的能力,求秘诀,当然如果没有秘诀,也可以,。字写大点,用劲点,写得不好一开始就要写慢点,模仿别人的字写粉笔字时粉笔要不时地转动,让粉笔

知识

479怎么写

阅读(207)

本文主要为您介绍479怎么写,内容包括479=38的英文怎么写,简算47/94.7+146/95.3,7x7的九宫格怎么填啊~~~急~~~。教你一个口决,奇数数bai阵均可照此口决填写: 1居上行正中央du, 依序斜填切莫zhi忘; 上出框时往下dao写, 右出框时填专左旁;

知识

甲骨文中我怎么写

阅读(197)

本文主要为您介绍甲骨文中我怎么写,内容包括我字的甲骨文怎么写,我的甲骨文怎么写,甲骨文的你怎么写。你字甲骨文的写法如下图:

知识

这这个的单词怎么写

阅读(172)

本文主要为您介绍这这个的单词怎么写,内容包括的这个字英语单词怎么写,这个单词怎么写,英语这个单词,英语这个单词怎么写,这个的英语单词。英语的单词:English读音:英 [ɪŋɡlɪʃ] 美 [ɪŋɡlɪʃ]n. 英语;英国人adj. 英语的;英国人的;英国的

知识

调查报告格式怎么写

阅读(204)

本文主要为您介绍调查报告格式怎么写,内容包括调查报告的格式范文,调查报告的格式怎么写,调查报告的格式怎么写。原发布者:在行传媒调研报告格式调研报告格式调研报告标题的格式调研报告要用能揭示内容中心的标题,具体写法有以下几种:(1)公文式

知识

自己开店简历怎么写

阅读(266)

本文主要为您介绍自己开店简历怎么写,内容包括开店经验怎么在简历里面写关键是这段经历如何在简历上总结,在求职简历里,应该怎样写上自己的开店经历,例,自己开店的经历如何写在简历里。在简历里自己开店这一段可以写成自主创业和从事的具体

知识

幼儿发展情况怎么写

阅读(1889)

本文主要为您介绍幼儿发展情况怎么写,内容包括幼儿发展状况怎么写,幼儿园幼儿发展情况报告小班怎么写,幼儿园小朋友的发展状况怎么写。为全面了解幼儿与健康主要指标的达标情况,掌握全校幼儿的营养和体格状况,促进幼儿健康成长,开校初由平川镇

知识

php文字代码怎么写

阅读(182)

本文主要为您介绍php文字代码怎么写,内容包括php写网站只要求输出一段文字,求老师指点,代码该怎么写,搜狗,php只提取10个字以内的代码怎么写啊高分求,求高手写一段php代码,提取文本随机文字高分赏。$str = "你好啊大家好今天你吃饭了吗";echo

知识

php中怎么写html代码

阅读(186)

本文主要为您介绍php中怎么写html代码,内容包括php中用php写html代码有什么作用,怎样给php页面里添加html页面,怎么在php文件写html代码。其实文件名称不要改成html还是php但是,这浏览器中确实可以输入html来执行php文件有一个方法就是对服

知识

php数组怎么写

阅读(189)

本文主要为您介绍php数组怎么写,内容包括那个php数组怎么写,php数组关联数组怎么写,怎么写php数组啊。不同的情况有不同的写法介绍几个操作PHP关联数组的技巧。添加数组元素 PHP是一种弱类型语言,这意味着你不需要显示声明一个数组及其大小,

知识

php爬虫怎么写

阅读(181)

本文主要为您介绍php爬虫怎么写,内容包括如何用php编写网络爬虫,怎么写php爬虫自动抓取,PHP可以写网页爬虫吗。php不太适合用来写网络爬虫,因为几乎没有现成的框架,或者成熟的下载机制,也不太适合做并发处理.下载页面的话除了一个curl,就是fil

知识

php居中代码怎么写

阅读(196)

本文主要为您介绍php居中代码怎么写,内容包括php居中代码是什么,php代码在网页上怎么设置显示居中,php写出的文字怎么居中。内容居中是页面布局进行设置的,和php是没有关系的,想要实现内容居中,可以通过text-align:center等css样式,具体的方法

知识

怎么写php文件

阅读(205)

本文主要为您介绍怎么写php文件,内容包括如何在html文件里写php程序,请问php如何写入文件,如何运行我自己写好的PHP文件。可以使用<?php ?&gt;将php语句包含,然后将html格式改为php。新建html文档并使用html模板生成必要元素,然后在bo

知识

php简历怎么写

阅读(242)

本文主要为您介绍php简历怎么写,内容包括PHP求职简历如何去写,php程序员实习生简历该怎么写&#39;,php初级工程师的简历该怎么写。让简历内容突出内容就是一切,所以简历一定要突出你的能力、成就以及过去经验,仅有漂亮的外表而无内容的简历是

知识

php函数怎么写

阅读(250)

本文主要为您介绍php函数怎么写,内容包括求php函数的写法记得有函数忘记怎么写了,php中取整函数怎么写,php构造函数格式,具体该怎么写应该注意什么呢。ceil(PHP 3, PHP 4, PHP 5)ceil -- 进一法取整说明float ceil ( float value )返回

[/e:loop]