首页 > 编程知识 正文

c语言编写php扩展(php扩展开发中文教程)

时间:2023-12-19 12:29:24 阅读:317681 作者:EYFS

本文目录一览:

php中怎么将c语言代码编译为php可用扩展

还是得使用C语言的编译器,,,,,按PHP的扩展规范去写、编译、链接

~

php怎样和c语言混合编程

php是一个脚本语言,如果需要系统调用,需要用C语言编写一个扩展来实现,另外C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。编写好的php扩展要在编译php源码时加进去。

编写PHP扩展必须要学习C语言吗

php整个底层都是用c语言写的,扩展库的开发,必须具备c语言的知识。

学习C语言可以做什么?

1. 后端开发

主流的后端开发语言就那么几种,以Java、C/C++领衔,Python和Go紧跟其后。

2. 游戏开发

掌握了C/C++基本语法之后,开发游戏也依然是一个不错的选择,目前工业级别的3D游戏引擎仍然是用C或C++编写的。

虽然以个人能力无法去完成一个庞大的网络游戏,但是从简单开始,编写一些小游戏,然后逐渐深入,循序渐进并最终加入大型游戏开发团队还是非常好的一个选择。与之相应的就业岗位主要有游戏开发工程师、游戏引擎架构工程师等。

3. 客户端开发

毕竟C/C++已经是一个很成熟的语言了,所以除了后端开发其实它还有很多其它的开发岗位可以选择。自然而然的,就是客户端开发了。

相信大多数学C/C++的同学都用过C/C++写桌面软件吧。那时候估计还是用MFC,照着代码书上敲一遍就能写一个比较简单的界面了。所以如果不想做后端,完全可以靠C/C++找一份客户端开发的工作。做客户端同样也需要扎实的编程基础和计算机理论基础,同时可能还要熟悉Windows/C++编译链接机制、QT客户端开发技术体系、Windows消息机制等技术。

4. 多媒体开发

目前多媒体技术同样渗入到人们的日常生活中,音视频已经成为人们获取信息的一个非常重要的手段。音视频在传输过程中都是经过压缩并且按照一定规则打包过的。视频的编码技术从最开始的H.261到如今的H.265,经历了30多年的发展,而且实现代码全部是由C或C++实现。

5. 嵌入式开发

上面几种岗位选择都是偏软件方向想的,而C/C++还有一类非常大的就业方向,就是去做嵌入式。嵌入式本身可能是偏硬件一点,但是现在做个什么事,都是软硬不分家的。

嵌入式的开发同样也会涉及到网络编程、并发编程等方面。通俗点解释可能就是,嵌入式代码是运行在别的小系统上,而不是传统意义的计算机上。这个方向除了需要编程能力,还需要基本的电路理论素养。

6. 人工智能

人工智能、机器学习等方向也少不了C或C++语言的身影。

需要强调的是虽然C/C++语言可以从事的方向非常广泛,但是仅仅掌握C/C++语法是远远不够的,上述的应用领域C/C++语言是基础,进入这些领域还需要进一步深入系统学习相关领域的知识以及去接触真实企业项目的内容。

关于用C语言写的mysql访问程序,作成PHP扩展的问题。

编译时配置好依赖关系吧,然后如果PHP环境比较多,别弄错环境就好了。

如何用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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。