欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

PHP C扩展初探

程序员文章站 2022-03-21 13:29:11
...
说明

环境:

 ubuntu14.4 
 php5.5.9 通过apt-get 安装

因为不同于编译安装的php,需要重新下载php源码进行扩展。

$ sudo apt-get source php5 

保存目录可自定义
打开源码文件进入到ext中,这里是存放扩展的地方,我们可以看到有 许多官方的扩展
这里可以科普一下php源码的主要目录以及功能
./main包含PHP主要宏定义
./pear 包含PEAR核心文件
./sapi 包含不同服务器抽象层代码
./Zend包含引擎的所有文件
我们要用到php-dev包,编译安装下会内置
$sudo apt-get install php5-dev
$phpize-v
验证安装是否成功

正式开始扩展

使用ext_skel 这个文件就在ext目录下
$./ext_skel --extname=newext
很多教程上都是这一句命令,但我在使用过程中发现了会在后续过程中无法找到newext.c文件
查找刚才的操作,发现会报cannot open /skeleton.c: No such file 原来是找不到skeleton.c 我们可以通过查看ext_skel发现

PHP  C扩展初探
所以需要指定skel的path
删除原先newext目录,重新走一遍
$ ./ext_skel --extname=newext --skel=/usr/lib/php5/skeleton
成功后返回
PHP  C扩展初探

根据提示我们需要更改 /newext2/config.m4 的注释
PHP  C扩展初探

$cd newext2
$phpize
$./configure --with-php-config=/usr/bin/php-config$make

在这里需要注意,如果出现make无规则错误 需要查看php-config路径是否正确
若编译成功会如下所示
PHP  C扩展初探

$make test 
$make install

接着我们就修改php.ini文件
增加extension = newext2.so
注意cli模式和cgi模式下的php.ini文件是不一样的,我在刚开始实验的时候发现cli模式下使用

$usr/bin/php -m

并没有发现newext2的扩展
后来在cgi下输出phpinfo却能看到
后来 在cli下 输出phpinfo 找到php.ini的路径作出修改最后成功
控制台下phpinfo输出过大可以使用下面方法

$ php phpinfo.php | less

找到路径后进行更改
PHP  C扩展初探
修改后别忘记restart apache

网上有很多相关的教程,我参考了《PHP和新技术与最佳实践》第七章和自己在实际操作遇到的问题进行整理总结,特别针对非编译安装PHP的情况,主要是注意配置文件的路径问题。

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了PHP C扩展初探,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。