首页 > 后端开发 > 正文

将php框架改成c扩展 php什么时候需要写c扩展

2023-09-24 22:18:46 | 我爱编程网

大家平时对后端开发都十分关注,今天为大家整理了将php框架改成c扩展 php什么时候需要写c扩展,下面就随我爱编程网小编一起来看一下吧。

将php框架改成c扩展 php什么时候需要写c扩展

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

将php框架改成c扩展 php什么时候需要写c扩展

php什么时候需要写c扩展



php什么时候需要写c扩展
PHP扩展有两种。一种是PHP编写的扩展,通过 composer 安装。一种是通过C编写,通过 PHP 命令来安装。
php需要写c扩展的情况有以下几种:
1. 遇到性能瓶颈时进行性能优化,比如密集计算、大量字符串处理等等
2. 跨进程通信、共享数据,比如全局数据表、配置文件、数据库连接池等等
3. php中需要用到一些本地C库或可执行文件中的功能,这些功能又没有PHP实现,比如imagemagick这种图片处理工具
更多PHP相关知识,请访问PHP中文网!

将php框架改成c扩展 php什么时候需要写c扩展我爱编程网

简单的入门级PHP程序改写C语言

我爱编程网(https://www.52biancheng.com)小编还为大家带来简单的入门级PHP程序改写C语言的相关内容。

#include<stdio.h>
void main()
{
int aa[100], i;
for(i=0; i<100; i++)
{
scanf("%d",&aa[i]);
}
int zhengshu=0, ling=0, fushu=0;
for(i=0; i<100; i++)
{
if(!i)
{
ling++;
}
else if(i<0)
{
fushu++;
}
else
{
zhengshu++;
}
}
printf("ling=%d zhengshu=%d fushu=%d",ling,zhengshu,fuzhu);
}

以上就是今天分享给大家的内容了,想要了解更多后端开发资讯,敬请关注我爱编程网!更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“将php框架改成c扩展 php什么时候需要写c扩展”相关推荐
c++怎么调用PHP的函数
c++怎么调用PHP的函数

c++怎么调用PHP的函数C++不可以调用php的函数,反过来则可以:将c++程序编写成dll,挂到php下面让php调用。C++属于编译语言。编译成机器码了。而php是动态语言。不能编译为机器码。不能编译为机器码的语言,咋能写在机器码语言中呢?不能编译为机器码的语言,是通过虚拟机运行的。如果你要想调用的话,不妨研究一下php的那些dll文件,难度有点大,我是力不能及。P

2024-07-27 11:22:36
java框架有哪些常用框架
java框架有哪些常用框架

java框架有哪些常用框架十大常用框架:一、SpringMVC二、Spring三、Mybatis四、Dubbo五、Maven六、RabbitMQ七、Log4j八、Ehcache九、Redis十、Shiro延展阅读:一、SpringMVCSpringWebMVC是一种基于Java的实现了WebMVC设计模式的请

2024-03-25 18:22:44
php mysql查询的时候怎么过滤掉html
php mysql查询的时候怎么过滤掉html

php过滤掉html标签及标签内的所有内容方法一:使用strip_tags()函数strip_tags()函数剥去字符串中的HTML、XML以及PHP的标签。使用案例:$string="&lt;p&gt;这里是潘旭博客&lt;/p&gt;"$newStr=strip_tags($string);echo$newStr;方法二:使用str_replace()函数s

2024-07-16 07:56:24
Python未来发展前景怎么样?
Python未来发展前景怎么样?

Python未来发展前景怎么样?首先从国家培养人才方向上来讲,国务院发布《新一代人工智能发展规划》,人工智能正式纳入国家发展战略,并且已经有数个省份将Python纳入到高考体系,国家计算机二级考试新增“Python语言程序设计”科目。这些都直接证明了Python的发展前景十分广阔。其次再说一下Python人才的供需情况,随着最近五年Python的持续走热,越来越多的公司开始使用Pyt

2024-01-26 12:39:19
c语言可以写java吗
c语言可以写java吗

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

2024-04-08 21:31:14
PHP用到的C语言中的“指针”多吗?
PHP用到的C语言中的“指针”多吗?

PHP用到的C语言中的“指针”多吗?php没有指针的概念.=============如果学习PHP的话还有没有必要学习“指针”“结构体共同体”“编译预处理”等知识点?================单从php来说,的确是用不上.但是既然都学习了前面几章,何不顺带看一下呢.即使PHP中没有指针概念,但你要理解了指针概念,对PHP的引用概念搏侍就很容易理解了.编译预算处理

2024-07-23 15:07:52
学Python的发展前景好吗
学Python的发展前景好吗

学Python的发展前景好吗随着近几年Python的飞速发展,应用范围逐步趋于广泛,后端开发、前端开发、爬虫、金融量化分析、人工智能、自动化运维、自动化运维、大数据,Python都有涉及。Python相对其他编程语言来讲,语法较简单,就算没有任何编程基础,我们也可以学习和掌握Python编程开发,是新时代的宠儿!因此参加Python工程师培训机构的人越来越多。Python有很多吸引程

2023-12-16 03:19:15
python web框架有哪些
python web框架有哪些

pythonweb框架有哪些1、DjangoPython中最全能的Web开发框架,各种功能完备,可维护性和开发速度都一级棒,不少人反应Django框架慢,它主要慢在DjangoORM与数据库的交互上,所以是否使用Django框架,需要取决于项目对数据库交互的要求以及各种优化,而对于Django的同步特性导致吞吐量小的问题,可以通过Celery等解决,这并不是一个致命问题。2、Torn

2024-02-09 20:24:23