为什么要用C扩展
C是静态编译的,执行效率比PHP代码高很多。同样的运算代码,使用C来开发,性能会比PHP要提升数百倍。IO操作如CURL,因为耗时主要在IOWait上,C扩展没有明显优势。
另外C扩展是在进程启动时加载的,PHP代码只能操作Request生命周期的数据,C扩展可操作的范围更广。
第一步
下载PHP的源代码,如php-5.4.16。解压后进入php-5.4.16\ext目录。输入 ./ext_skel –extname=myext,myext就是扩展的名称,执行后生成myext目录。
ext_skel是PHP官方提供的用于生成php扩展骨架代码的工具。
cd myext。可以看到php_myext.h、myext.c、config.m4等几个文件。config.m4是AutoConf工具的配置文件,用来修改各种编译选项。
第二步
修改config.m4,将
dnl PHP_ARG_WITH(myext, for myext support, dnl Make sure that the comment is aligned: dnl [ --with-myext Include myext support])
修改为
PHP_ARG_WITH(myext, for myext support, [ --with-myext Include myext support])
下边还有一个 –enable-myext,是表示编译到php内核中。with是作为动态链接库载入的。
第三步
修改php_myext.h,看到PHP_FUNCTION(confirm_myext_compiled); 这里就是扩展函数声明部分,可以增加一行 PHP_FUNCTION(myext_helloworld); 表示声明了一个myext_helloworld的扩展函数。
然后修改myext.c,这个是扩展函数的实现部分。
const zend_function_entry myext_functions[] = { PHP_FE(confirm_myext_compiled, NULL) /* For testing, remove later. */ PHP_FE(myext_helloworld, NULL) PHP_FE_END /* Must be the last line in myext_functions[] */ };
这的代码是将函数指针注册到Zend引擎,增加一行PHP_FE(myext_helloworld, NULL)(后面不要带分号)。
第四步
在myext.c末尾加myext_helloworld的执行代码。
PHP_FUNCTION(myext_helloworld) { char *arg = NULL; int arg_len, len; char *strg; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) { return; } php_printf("Hello World!\n"); RETRUN_TRUE; }
zend_parse_parameters是用来接受PHP传入的参数,RETURN_XXX宏是用来返回给PHP数据。
第五步
在myext目录下依次执行phpize、./configure 、make、make install。然后修改php.ini加入extension=myext.so
执行php -r “myext_helloworld(‘test’);”,输出hello world!
http://rango.swoole.com/archives/152
相关推荐
在IT行业中,C语言是一种底层且高效的编程语言,而PHP是一种广泛应用的服务器端脚本语言。将两者结合,可以通过编写C扩展来增强PHP的功能,提高性能。...不断地试验和学习,你将成为编写PHP C扩展的专家。
最后,创建一个PHP文件(如`test2.php`),调用C语言编写的扩展函数,运行这个文件,如果一切顺利,你应该能看到预期的输出结果,这就表明你已经成功地使用C语言开发了一个PHP扩展,并在PHP环境中正确地调用了它。...
在Linux环境下使用C语言编写PHP扩展是一种常见的技术手段,尤其对于那些需要高性能处理的任务而言尤为重要。通过编写PHP扩展,开发者能够利用C语言的强大功能来增强PHP的功能性和性能。本文将详细介绍如何在Linux...
Phalcon是一个高效且高度优化的PHP框架,它以C语言编写,从而提供了比纯PHP代码更高的执行速度。作为一款扩展型框架,Phalcon被设计为直接集成到PHP解释器中,成为PHP的一部分,使得Web应用的性能得到显著提升。这个...
### 使用C语言扩展PHP:构建PHP扩展DLL #### 前言 随着PHP的应用范围不断扩大,对于性能的要求也日益提高。而C语言作为一种底层语言,其执行效率远高于PHP这样的高级语言。因此,通过C语言编写PHP扩展可以显著提升...
操起google搜了一通,结果发现Zend已经写了一个如何编写php extension的教程: http://devzone.zend.com/article/1021-Extension-Writing-Part-I-Introduction-to-PHP-and-Zend 浏览完牛人的大作,更是信心...
【标题】"简单高性能优雅的phpc扩展框架"所指的是一个专门为PHP设计的C扩展框架,旨在提升PHP应用的性能并提供简洁优雅的编程体验。C扩展是将PHP功能用C语言编写,然后编译为PHP可以调用的模块,这样能够利用C语言的...
本文将通过实例介绍如何开发一个简单的PHP扩展——“Hello World”扩展,并逐步讲解整个过程。 #### 二、准备工作 首先,我们需要准备一个适合开发PHP扩展的环境。本文示例基于如下环境: - **操作系统**:CentOS...
2. **PHP扩展基础**:讲解如何创建一个简单的PHP扩展,包括定义函数、类、常量等,以及如何编译和安装扩展。 3. **资源管理**:讨论如何管理和释放PHP扩展中使用的内存,避免内存泄漏和其他资源管理问题。 4. **...
7. **Xavier关联**:在压缩包文件名称列表中提到了"Xavier",这可能是一个示例项目或库,展示了如何使用Zephir编写PHP扩展。通过对Xavier源代码的学习,开发者可以进一步了解Zephir的实际应用和最佳实践。 总之,...
总结来说,这个项目的目标是创建一个用C语言编写、针对PHP的高性能MVC框架扩展。开发者需要对PHP的C API有深入了解,掌握C语言编程,并熟悉MVC设计模式。通过这样的扩展,可以提升PHP应用的运行效率,特别是对于高...
在Linux和FreeBSD操作系统上,使用...总的来说,开发PHP的C语言扩展需要对PHP内核有深入的理解,同时也需要扎实的C语言基础。通过不断实践和学习,开发者可以创建出强大且高效的自定义扩展,为PHP应用增添新的活力。
首先,让我们了解为何要编写PHP扩展。有四个主要理由: 1. PHP语言的抽象程度使得某些库或操作系统特定调用无法直接进行。 2. 想要让PHP以非传统方式运行。 3. 已有的PHP代码可以优化,使其运行更快、体积更小、...
该教程分为两部分,第一部分主要介绍如何创建一个基本的 PHP 扩展库,第二部分则介绍如何在扩展库中调用 C 语言编写的共享库。 第一部分:创建基本的 PHP 扩展库 在开始之前,需要搭建 LAMP 环境,并检查 PHPize ...
总结一下,这个“企业微信会话内容存档php扩展.zip”包含了一个PHP用C语言编写的扩展库和一个示例代码,使得PHP开发者能够方便地集成企业微信的会话内容存档功能,适用于PHP 7.0及以上版本。开发者可以通过示例代码...
PHP扩展是用C语言编写的,它们通过ZEND引擎与PHP内核交互,提供新的功能或者增强已有功能。使用Cygwin,开发者可以在Windows系统上构建这些C扩展,而无需安装完整的Linux环境。以下是一些使用Cygwin进行PHP扩展开发...