首页 > 后端开发 > 正文

如何用c语言在windows平台上开发php extension

2024-09-23 08:43:13 | 我爱编程网

今天我爱编程网小编整理了如何用c语言在windows平台上开发php extension相关信息,希望在这方面能够更好帮助到大家。

本文目录一览:

如何用c语言在windows平台上开发php extension

如何用c语言在windows平台上开发php extension

何使用C语言发PHP扩展

函数功能:php面整数符号数其内部实现其实longunsigned 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修改编译参数

[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi config.m4
cd php-5.3.14/ext/int_ext
vi config.m4掉 PHP_ARG_ENABLE(int_ext, whether to enable int_ext support
[ --enable-int_ext Enable int_ext support]) 两行前面dnl 修改:

[plain] view plaincopyprint?
01.1. dnl Otherwise use enable:
02.2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
03.3. dnl Make sure that the comment is aligned:
04.4. [ --enable-int_ext Enable int_ext support])
1. dnl Otherwise use enable:
2. PHP_ARG_ENABLE(int_ext, whether to enable int_ext support,
3. dnl Make sure that the comment is aligned:
4. [ --enable-int_ext Enable int_ext support])
3编写C代码

[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi php_int_ext.h
03.# PHP_FUNCTION(confirm_int_ext_compiled); 面新增行 PHP_FUNCTION(int_ext);
cd php-5.3.14/ext/int_ext
vi php_int_ext.h
# PHP_FUNCTION(confirm_int_ext_compiled); 面新增行 PHP_FUNCTION(int_ext);[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02.vi int_ext.c
03.#PHP_FE(confirm_int_ext_compiled, NULL) 面添加 PHP_FE(int_ext, NULL)添加:
04.1. zend_function_entry int_ext_functions[] = {
05.2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
06.3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
07.4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
08.5. };
cd php-5.3.14/ext/int_ext
vi int_ext.c
#PHP_FE(confirm_int_ext_compiled, NULL) 面添加 PHP_FE(int_ext, NULL)添加:
1. zend_function_entry int_ext_functions[] = {
2. PHP_FE(confirm_int_ext_compiled, NULL) /* For testing, remove later. */
3. PHP_FE(int_ext, NULL) /* For testing, remove later. */
4. {NULL, NULL, NULL} /* Must be the last line in int_ext_functions[] */
5. };
核代码:

[plain] view plaincopyprint?
01.PHP_FUNCTION(int_ext)
02.{
03. char * str = NULL;
04. int str_len;
05. int argc = ZEND_NUM_ARGS();
06. if(zend_parse_parameters(argc TSRMLS_CC,"s",&str,&str_len) == FAILURE)
07. return ;
08. char * result;
09. int result_length = str_len;
10. result = (char *) emalloc(result_length + 1);
11. memcpy(result,str,result_length);
12. unsigned long result_num = strtoul(result, NULL, 10);
13. int sizeoflong sizeof(long);
14. unsigned long max_long = 1 << (sizeoflong * 8 -1);
15. if(result_num < max_long)
16. {
17. RETURN_LONG(result_num);
18. }
19. else
20. {
21. RESULT_STRINGL(result, result_length, 0);
22. }
23.}
PHP_FUNCTION(int_ext)
{
char * str = NULL;
int str_len;
int argc = ZEND_NUM_ARGS();
if(zend_parse_parameters(argc TSRMLS_CC,"s",&str,&str_len) == FAILURE)
return ;
char * result;
int result_length = str_len;
result = (char *) emalloc(result_length + 1);
memcpy(result,str,result_length);
unsigned long result_num = strtoul(result, NULL, 10);
int sizeoflong sizeof(long);
unsigned long max_long = 1 << (sizeoflong * 8 -1);
if(result_num < max_long)
{
RETURN_LONG(result_num);
}
else
{
RESULT_STRINGL(result, result_length, 0);
}
}

4编译

[plain] view plaincopyprint?
01.cd php-5.3.14/ext/int_ext
02./usr/local/php/bin/pphpize
03../configure --with-php-config=/usr/local/php/bin/php-config
04.make
05.make install
cd php-5.3.14/ext/int_ext
/usr/local/php/bin/pphpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
产so文件: /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/int_ext.so
修改php.ini 添加扩展extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"

[int_ext]

extension = int_ext.so

5测试

[plain] view plaincopyprint?
01.$a = int_ext("12345678900");
02.var_dump($a);
03.$a = int_ext("123456789");
04.var_dump($a);
$a = int_ext("12345678900");
var_dump($a);
$a = int_ext("123456789");
var_dump($a);
结输:

[plain] view plaincopyprint?
01.string(11) "12345678900"
02.int(123456789)

如何用c语言在windows平台上开发php extension

thinkphp 3.2.2版本中 是怎么加载 functions.php 的,给解释一下

ThinkPHP的函数有三类,一类是系统函数,在ThinkPHP目录下的Common下;一类是项目函数,在项目目录下的Common目录中;最后一类是扩展函数。

1、系统函数:包含function.php、common.php和runtime.php三个文件,程序运行时无需手动加载,在编译过程中自动加载;

2、项目函数:是项目中的Common文件中的Common.php 文件(一般不存在,需自己创建),分组部署时,需要使用  (分组名)/function.php命名。此类函数也是可以直接加载的; 我爱编程网

3、扩展函数是指用户自定义的函数,可以提供给开发者更多的DIY内容,函数名自定义,但是不是在设置了自动加载的情况下是不能自动加载的。

函数的加载:

系统函数和项目函数是不需要加载就能直接使用的,但是扩展函数还是需要加载才能使用的,这里可以有动态和静态两种方式加载扩展函数:

1、动态加载:(可以实时生效)

'LOAD_EXT_FILE'=>'USER'  //项目中的conf.php

2、手动加载:(个别模板使用)

load(@.user)  //加载的就是Common目录下的user.php,@只本目录下的

如何用c语言在windows平台上开发php extension

如何获取php扩展库源代码包

我爱编程网(https://www.52biancheng.com)小编还为大家带来如何获取php扩展库源代码包的相关内容。

您需要告诉构建系统在编译时链接到共享库。这允许依赖项存储在已编译的PHP扩展中,在第一次使用时将加载它。

为此,您需要修改config.m4以添加库。你可以通过PHP_ADD_LIBRARY宏来做到这一点。此宏将一个库添加到链接行并具有该表单PHP_ADD_LIBRARY($name,$append,$var)。第一个参数是库的名称; 这是*.so没有lib前缀的文件的名称(例如xxx)。第二个参数确定(我推测)是否附加或覆盖该行; 这应该通常设置为1。最后一个参数是存储该行的变量名称。必须将此变量替换为输出文件PHP_SUBST。

您应该将PHP_ADD_LIBRARY行放在文件中PHP_NEW_EXTENSION宏之前的某个位置config.m4。另外,PHP_ADD_LIBRARY在PHP_CHECK_LIBRARY电话中打包是个好主意。这可确保构建系统在添加库之前找到库。请参阅下面的示例。

这是另一个类似于你的SO问题。它有一些你可以遵循的工作实例。另外,我将在这里包含一个简单示例:

PHP_CHECK_LIBRARY(xxx,xxxfunction,[
    PHP_ADD_LIBRARY(xxx,1,XXX_SHARED_LIBADD)],[
    AC_MSG_ERROR([Please install libxxx on the system])],[])PHP_SUBST([XXX_SHARED_LIBADD])

注意:第二个参数PHP_CHECK_LIBRARY是一个函数,构建系统将检查它是否找到给定的库。

以上,就是我爱编程网小编给大家带来的如何用c语言在windows平台上开发php extension全部内容,希望对大家有所帮助!更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“如何用c语言在windows平台上开发php extension”相关推荐
哪里有JAVA开发板,软件开发平台,Web开发平台或快速开发平台的源码,包括工作流源码,还有JAVA OA源码?
哪里有JAVA开发板,软件开发平台,Web开发平台或快速开发平台的源码,包括工作流源码,还有JAVA OA源码?

初学者想学ARM嵌入式,应该选ARM9还是ARM11开发板?对于ARM嵌入式的初学者,建议用ARM9开发板。首先,从功能上来说,ARM11要比ARM9强一些,但是性能优异并不代表适合初学者。对于初学者来说ARM11的有些功能是冗余。其次,学习ARM9或者ARM11就在所难免学习其所支持的操作系统Linux(ARM11可以支持Android)。目前,市面上ARM9的开发版的价格要比AR

2024-07-03 16:24:53
java语言一般用来开发什么东西?windows窗体程序可以吗?
java语言一般用来开发什么东西?windows窗体程序可以吗?

dw和vscode区别?vscode和dw的区别1、VSCode是为开发人员设计的;2、Dreamweaver是为设计师设计的;3、VSCode支持MacOS、Windows、Linux;4、Dreamweaver不支持Linux;5、VSCode支持多种编程语言的开发,如JavaScript、C、Java、Python等;6、Dreamweaver仅支

2024-05-15 16:44:47
如何在华为云软件开发云上运行Python
如何在华为云软件开发云上运行Python

如何在华为云软件开发云上运行Python因为Python没有编译构建的过程,所以在实际开发过程中Python工程是可以不用编译直接发布的,但是在软开云中云端部署需要可识别的软件包,所以在软开云中需要对Python的程序进行打包。华为云软件开发云编译构建服务支持多种开发环境的构建,也支持Python类型构建egg格式软件包,本demo中为了打通部署,形成自动化研发流程,采用Other构建类

2023-12-26 20:52:40
java如何调用c语言源文件并进行执行?
java如何调用c语言源文件并进行执行?

java如何调用c语言源文件并进行执行?要在java中调用c语言的库,需要使用Java提供了JNI。\x0d\x0a举例说明\x0d\x0a在c语言中定义一个voidsayHello()函数(打印HelloWorld);然后在Java中调用这个函数显示HelloWord.\x0d\x0a现在分别从Java和C语言两部分说明:\x0d\x0a1.Java部分\x0d\x0a首先定义一个Hell

2024-04-17 21:24:30
python是智能机器人的开发语言吗?
python是智能机器人的开发语言吗?

python是智能机器人的开发语言吗?不是,Python只是适合智能机器人,因为其中包含很多AI模块、算法(sklearn,tensorflow等等),所以即便对算法、数学公式不太擅长,但只要掌握了这些模块的用法,一样可以写出AI脚本Python编程5种常用工具是什么?【导语】Python是一种开源的编程语言,可用于Web编程、数据科学、人工智能以及许多科学应用,学习Python可以

2024-02-27 00:00:27
c#能开发android程序吗
c#能开发android程序吗

c#能开发android程序吗c#能开发android程序吗可以,而且还是直接生成安卓deployablecode(DEX),不需要clr运行时环境,编译速度比java快n倍,体积更小,ide用的是vs或者SharpDevelop。他就是dot42项目,不过缺点是他只能被用于写自由软件,不能用于商业软件,除非花399USD购买其商业licence。visualstudio2

2024-05-26 20:32:23
求助,如何在电脑上运行已开发 好的java软件系统
求助,如何在电脑上运行已开发 好的java软件系统

求助,如何在电脑上运行已开发好的java软件系统我也是菜鸟,你说java环境配置好了,但是环境变量应该不是在上面吧?这是第一步。1、解压然后运行apache-tomcat-5.5.27这个服务器。运行后先看一下能不能在浏览器里打开这个链接,运行方法:打开apache-tomcat-5.5.27的bin目录下startup.bat这个批处理文件,如果没成功可以根据错误码,百度再查具体原

2024-03-18 04:48:46
c语言可以写java吗
c语言可以写java吗

c语言可以写java吗c语言学完可以转java吗?当然可以转,但如果说你学C语言的目标是为了初步掌握编程基础,并打算学习更高级语言做web开发,那可以考虑直接去学java。C语言是高级语言的基础,也是高级语言入门的最佳选择之一,C语言面向过程写程序按部就班自由性比较大,java基础比较简单,没有语言基础的照样能学会。在你学了C语言之后,顶多了解了C语言的思想以及某些语法。但是在java

2024-04-08 21:31:14