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

Python011

如何用C语言编写PHP扩展的详解,第1张

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.def

3:修改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.ini

php.ini如果找不到可以从phpinfo()打出的信息看到

#cd /usr/local/php/lib/

php.ini增加扩展信息

extension=caleng_module.so

8:重启Apache

# /usr/local/apache2/bin/apachectl restart

9:检查加载

/usr/local/php/bin/php -m

10: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.def

int a(int x, int y)

string b(string str, int n)

2、通过扩展骨架生成器,将在ext目录下自动建立扩展目录caleng_module

#>./ext_skel --extname=caleng_module --proto=caleng_module.def

3、修改配置文件: #>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.c

PHP_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.

计科专业从事嵌入式开发多年,从现在的市场行情以及就业的机会上讲php的就业空间还是大于C语言,但并不意味着C语言就已经被淘汰掉了,相反因为高级语言在应用领域使用的范围比较广泛,倒是显得很多底层的编程语言成了稀缺的物种,毕竟对于底层的维护也是一项很重要的工作,况且C语言的使用范围并不是很狭窄,特别是在嵌入式领域还是被广泛的使用中,像华为这种通讯设备厂家对于C语言的使用概率还是非常高的,所以不能简单的认为哪种编程语言最好,还是取决于个人的爱好和兴趣,如果真的对于哪种编程语言就是感兴趣,就可以忽略市场大方向的需求了,因为只要还在市场存在的编程语言证明其还有存在的价值。

而且编程语言之间是相通的,如果已经掌握了一种编程语言在很短的时间内就能切换到另外一种编程语言,毕竟编程思想和编程模式有着太多的相似之处,比如利用php编程编写网络的并发代码,如果已经掌握了大部分的模式再切换到C语言去编程,虽然使用的工具有很大的差异,但是起码从内心上有底,毕竟已经有成熟的案例可以对照学习的过程也能加快好几倍,所以程序员的能力的强弱比较的不是掌握编程语言的数量关键还是实际编程中解决问题的能力,解决问题的能力显得比较笼统,像在项目选择使用什么样子的框架,编程过程中遇到编译不过的语法,解决客户提出棘手的问题,这些都属于解决问题的能力,所以和这些能力相比编程语言已经弱化许多了。

对于这两种编程语言的选择,简单做个介绍如果是想从事后台服务器的php是必选的编程语言,如果是想从事底层的开发C语言是必备编程语言,先要从方向上明确这样在选择的时候不至于犯很大的错误,其实在早期的php编程中也是接近于面向过程的编程,在语法习惯上也是和C语言有很多相似之处,但后续编程语言基本上向着面向对象的趋势在发展所以后来转向面向对象的编程了,相对来讲php属于集成化的编程语言在实际编程过程中可以有很多的类库来使用,对于新手来讲php早期更加容易做出一些复杂的功能。

C语言基本上接近于比较原始的编程语言,想要实现很多功能都需要自己动手去写,但是C语言最大的优势在执行的效率高,而且编程语法非常的灵活所以讲C语言对于底层编程特别的合适,像操作系统代码都是C语言来完成,执行的效率高而且还能灵活多变,但C语言在图形编程方面需要借助于很多成型的图形库,还是更加适合在后台默默的工作,现在比较流行大型算法从效率的角度考虑还是以C语言为主要的编写为主。

在早期大学教程中第一门编程相关的编程语言几乎都是C语言,随着高级语言的流行现在大学的开设的编程语言的种类也多了,再加上编程语言向着集成化的发展,让很多人觉得C语言都是老古董的存在了,个人还是建议如果想长期在编程行业去工作,不妨对这门编程语言学习掌握一下,对于了解底层实现原理还是有着极大的好处,知其然知其所以然,对于了解的编程的框架还是有着极大的好处的,所以如果有时间建议掌握C语言,从知识的纵观程度上还是有着极大的好处的,希望能帮到你。

作为一名IT从业者,同时也是一名计算机专业的教育工作者,我来回答一下这个问题。

首先,C语言和PHP语言都是目前IT行业内应用比较普遍的编程语言,C语言主要应用在嵌入式开发、操作系统开发和容器开发等领域,而PHP则主要应用于Web开发领域,这两门编程语言在应用场景上几乎没有交叉,所以也相对比较好选择。

对于计算机基础比较薄弱的初学者来说,学习PHP是比较不错的选择,一方面PHP语言比较容易学习和掌握,另一方面PHP相关的开发岗位也比较多,比较容易实现就业。虽然相对于Java和Python等编程语言来说,PHP语言的应用场景比较集中,主要应用在Web开发领域,但是由于PHP在Web开发领域的应用非常普遍,所以就业机会也相对比较多。

# 科技 V计划# PHP是主要适用于Web开发领域脚本语言

C语言应用广泛:操作系统Windows(c艹)、Linux、 游戏 引擎、驱动程序

php与c语言的不同点

1、PHP是服务器脚本语言,必须要运行在能够解析PHP的服务器上

2、C语言是低级语言,PHP是高级语言

3、C语言是强类型语言,PHP是弱类型语言,这一点从两者语法的差别可以看出

4、PHP主要用来做web应用,C语言主要用来做计算机底层的应用,另外C语言功能比PHP强大很多,你应该知道PHP就是用C语言写的

5、PHP不支持多线程

6、PHP去掉了C语言中关于指针比较难把握的运算,使得PHP比C容易学习和掌握

7、PHP的基本变量类型有整型(Integer)、浮点型(Float)、字符串(String)(这是C没有的,但C++有String类)以及布尔型(Boolean)(C没有,但是C++有)。构造类型有数组和对象。此外还有两个特殊类型:空值(NULL)(C也有)和资源(Resource)。

8、在PHP中定义常量的方式在学习C的人看来有点不可思议,竟然是用一个define函数实现的,PHP的函数实在是太厉害了,后面我们会看到定义数组也是由函数完成的,我们真得感谢PHP无比丰富的函数库,它们成就了PHP的易用和强大。

计科专业从事嵌入式开发多年,从现在的市场行情以及就业的机会上讲php的就业空间还是大于C语言,但并不意味着C语言就已经被淘汰掉了,相反因为高级语言在应用领域使用的范围比较广泛,倒是显得很多底层的编程语言成了稀缺的物种,毕竟对于底层的维护也是一项很重要的工作,况且C语言的使用范围并不是很狭窄,特别是在嵌入式领域还是被广泛的使用中,像华为这种通讯设备厂家对于C语言的使用概率还是非常高的,所以不能简单的认为哪种编程语言最好,还是取决于个人的爱好和兴趣,如果真的对于哪种编程语言就是感兴趣,就可以忽略市场大方向的需求了,因为只要还在市场存在的编程语言证明其还有存在的价值。

作为最古老的编程语言之一,C依然高居榜首,这归功于其可移植性以及微软、Oracle和苹果等 科技 巨头采用它。它与几乎所有系统兼容, 很适合操作系统和嵌入式系统。 由于运行时环境相对小巧,因此C是保持这种系统精简的完美选择。 强烈建议初学者学C,它实际上是编程语言的通用语言,已催生出了同样很受欢迎的衍生语言,比如C++和C#。

用于Web开发的PHP,据TIOBE显示,PHP在TIOBE最受欢迎的编程语言排行榜中位居第七,取代JavaScript成为更受欢迎的脚本语言。PHP主要用在服务器端上用于Web开发,约占网站总数的80%。Facebook最初使用的就是PHP,PHP在WordPress内容管理系统中扮演的角色让它很受欢迎。PHP提供了几个框架,比如Laravel和Drupal,帮助开发人员更快地构建应用程序,拥有更高的可扩展性和可靠性。因此, 如果你在找Web开发方面的职位,PHP是不错的选择。

单看热度的,话还是C语言更好一些,而且PHP还是要有C的基础才好学一些,要做程序员的话只单学一个怕是不够用,哈哈哈哈哈哈嗝,还是学C吧