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

本文目录一览:

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)

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/238507.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相关推荐

  • PHP和Python哪个好找工作?

    PHP和Python都是非常流行的编程语言,它们被广泛应用于不同领域的开发中。但是,在考虑择业方向的时候,很多人都会有一个问题:PHP和Python哪个好找工作?这篇文章将从多个方…

    编程 2025-04-29
  • MQTT使用教程

    MQTT是一种轻量级的消息传输协议,适用于物联网领域中的设备与云端、设备与设备之间的数据传输。本文将介绍使用MQTT实现设备与云端数据传输的方法和注意事项。 一、准备工作 在使用M…

    编程 2025-04-29
  • Python3.6.5下载安装教程

    Python是一种面向对象、解释型计算机程序语言。它是一门动态语言,因为它不会对程序员提前声明变量类型,而是在变量第一次赋值时自动识别该变量的类型。 Python3.6.5是Pyt…

    编程 2025-04-29
  • Deepin系统分区设置教程

    本教程将会详细介绍Deepin系统如何进行分区设置,分享多种方式让您了解如何规划您的硬盘。 一、分区的基本知识 在进行Deepin系统分区设置之前,我们需要了解一些基本分区概念。 …

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • 学习Python对学习C语言有帮助吗?

    Python和C语言是两种非常受欢迎的编程语言,在程序开发中都扮演着非常重要的角色。那么,学习Python对学习C语言有帮助吗?答案是肯定的。在本文中,我们将从多个角度探讨Pyth…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • Python读取中文

    Python是一种高级编程语言,被广泛地应用于各种领域中。而处理中文数据也是其中重要的一部分。本文将介绍在Python中如何读取中文,为大家提供指导和帮助。 一、读取中文文件 在P…

    编程 2025-04-29
  • Python被称为胶水语言

    Python作为一种跨平台的解释性高级语言,最大的特点是被称为”胶水语言”。 一、简单易学 Python的语法简单易学,更加人性化,这使得它成为了初学者的入…

    编程 2025-04-29

发表回复

登录后才能评论