PHP扩展开发编译环境的搭建
PHP允许使用扩展的方式,直接使用C语言开发PHP的功能,由于编译的问题,很多底层和框架的基础工作如果用PHP必然会带来额外的开销,降低系统的吞吐量,必然yaf就是这样的思路,把框架封装在扩展里,让系统开销降低到最小,基本接近不用框架的性能水平。
首先是获取PHP的源代码,这里提供一个PHP源码的下载地址,目前最新的是PHP7.1,不够考虑到我一直在用的环境,这里选择PHP 5.4.31为例。
第二是在Windows平台下的PHP编译部署。在Windows下需要用到Visual Studio,PHP 5.4.31用到的是Visual Studio 2008,同时需要升级到vS2008 SP1编译才能正常编译使用。否则在部署之后就会出现无法加载的问题。
注意,在此之前,windows需要先安装php,并把php加入到环境变量中,推荐安装xampp,一步到位。
VS2008 SP1 :下载地址
PHP 5.4.31源码:下载地址
PHP5ts.lib:下载地址
安装完开发环境之后,就可以开始进行配置了。在Windows下开发扩展在创建项目时比在Ubuntu上要麻烦的多,一个是需要PHP的源代码,还有一个就是配置需要先构建一个项目,然后手动配置,不能像Ubuntu下那么直接执行一个脚本就完事了。将源代码部署在E:\Projects\php-5.4.45-src路径下,然后使用管理员身份运行终端(cmd.exe)然后
cd E:\Projects\php-5.4.45-src\ext
php ext_skel_win32.php --extname=hello
就可以构建一个PHP扩展的开发项目,(路径在 E:\Projects\php-5.4.45-src\ext\hello)可以看到如下图所示的项目文件

利用之前安装好的VS2008SP1 打开这个项目。可以看到如下内容

右键选中项目 打开右键菜单-->属性,如下

点击C/C++-->常规,找到并打开如下图红圈所示

把这是个地址都修改成PHP源码部署的绝对地址,这样就不会出现稍微移动一下项目位置就会出现不能编译的问题,修改后的地址如下

配置好之后,还需要在PHP源码上做一些设置,
找不到..main\config.w32.h文件的错误
(2)需要单独下载php5ts.lib并进行配置,否则会出现
1>LINK : fatal error LNK1181: 无法打开输入文件“php5ts.lib”
错误,将php5ts.lib解压到E:\Projects\php-5.4.45-src\build,然后打开项目属性--->链接器--->输入,然后把值改成如下图标识的样子。

到此为止,就可以开始编译项目了。编译出来的动态库,通过在php.ini后增加扩展的方式,然后重启xampp,就可以通过phpinfo()函数看到了。
第三是在Ubuntu平台下的编译部署,在Ubuntu下开发php扩展要简单的多,首先一样先安装xampp for Ubuntu,安装方法可以参考我前一篇文章《Ubuntu16.04的PHP开发环境配置》。然后配置系统的php环境,执行如下命令
将系统php和xampp中的php链接在一起,这样可以方便测试php扩展。系统的php命令路径在 cd /usr/local/bin,所以先切换到该路径下

cd /usr/local/bin
sudo mv php php-5.4.45
sudo mv php-cgi php-cgi-5.4.45
sudo mv php-config php-config-5.4.45
sudo mv phpize phpize-5.4.45 sudo ln -s /opt/lampp/bin/php-5.4.31 php
sudo ln -s /opt/lampp/bin/php-cgi-5.4.31 php-cgi
sudo ln -s /opt/lampp/bin/php-config-5.4.31 php-config
sudo ln -s /opt/lampp/bin/phpize-5.4.31 phpize
sudo ln -s /opt/lampp/etc/php.ini /usr/local/lib/php.ini

执行之后,xampp apache使用的php和终端使用的php就是同一个了。
接下来就可以开始创建项目了,设置PHP源码放置在 home/Projects/php-5.4.45-src
注意 ext_skel 刚开始是没有执行权限的,需要执行如下命令 给予执行权限
chmod 777 ext_skel
那么接下去创建项目可以执行如下的命令

cd /home/Projects/php-5.4.45-src/ext
sudo ./ext_skel --extname=hello
cd hello
gedit config.m4 /*找到第16行和第18行去掉前面的dnl注释,如下图所示*/
sudo phpize
sudo ./configure
sudo make && make install
sudo make test


注意保存文件之后,还需要执行phpize,否则还是会碰到不生成.so文件的问题。
PHP扩展开发编译环境的搭建的更多相关文章
- 利用 Docker 构建一个简单的 java 开发编译环境
目前 Java 语言的版本很多,除了常用的 Java 8,有一些遗留项目可能使用了 Java 7,也可能有一些比较新的的项目使用了 Java 10 以上的版本.如果想切换自己本地的 Java 开发环境 ...
- C++ 函数模板与类模板(使用 Qt 开发编译环境)
注意:本文中代码均使用 Qt 开发编译环境,如有疑问和建议欢迎随时留言. 模板是 C++ 支持参数化程序设计的工具,通过它可以实现参数多态性.所谓参数多态性,就是将程序所处理的对象的类型参数化,使得一 ...
- Java编译环境的搭建(eclipse)
每用一种语言开发,要搭建其编译和开发环境,我们废话不说,立刻来看看Java开发环境的搭建. 1.安装JDK和JRE Windows环境下: a.去Oracle官网下载对应版本的JDK安装包,http: ...
- WebAssembly学习(二):Windows10下WebAssembly C/C++编译环境的搭建与Hello World尝试
首先,不论是在Windows.Linux还是Mac上,Webassembly的编译都是主要依赖于Emscripten SDK这个工具的.但是,在这里必须要吐槽一下,不论是WebAssembly官网.W ...
- Visual Studio Code (VSCode) 配置 C/C++ 开发编译环境
前言 工作多年,突然发现很多C++的基础都忘记了,加之C++不断更新换代后的各种新特性,于是想重拾C++的基础学习.虽然现在工作都是Linux平台,但考虑到个人方便,自己也仅仅想重温语法,家里家外都可 ...
- Windows下QT4.8.4编译环境的搭建(转载http://blog.csdn.net/bestgonghuibin/article/details/38933141)
开始使用QT了,所以第一步就是把环境搭起来,这里小记一下,以免以后忘记. 1. 下载安装文件 要使用QT功能,那么必须要下载QT的源码,还必须要一个是用QT的编译环境,可以是VS2010,也可以是专用 ...
- 第一篇:《UNIX 网络编程 第二版》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 第三步:解压下载到的包并放在用户主目录中 第四步:进入包内并执行以下命令 su ...
- 第一篇:《UNIX 环境高级编程》编译环境的搭建
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
- 《UNIX 环境高级编程》编译环境的搭建( 运行本专栏代码必读 )
第一步:搭建基本的编译环境 安装gcc, g++, bulid-essential等编译软件 第二步:下载本书示例源码包 可在这里下载 www.apuenook.com 第三步:解压下载到的包并放在用 ...
随机推荐
- MySQL8.0.20安装详解
https://blog.csdn.net/yeb112233/article/details/106042867/ alter user root@localhost identified by ' ...
- PDF的信息提取的问题
PDF对企业应用来说是刚需. 然而PDF显然不是一种对机器友好的格式,它只是对人类友好,就是说方便阅读打印,但让程序去提取其中的内容却很难.下面简单说说为什么是这样. 以前还读书的时候(20+ ...
- CSS基础 结构伪类选择器 last-child、first-child和nth-of-type的使用方法
一.通过伪类选择器查找单个标签元素html结构 <div> <a herf='#'>导航1</a> <a herf='#'>导航2</a> ...
- RabbitMQ开启SSL与SpringBoot连接测试
楔子 近期公司程序被安全扫描出 远程主机允许明文身份验证 中风险漏洞,查了下修复方案,RabbitMQ官方提供了SSL连接方式,而且 SpringBoot AMQP 也支持 SSL 连接.以下将配置R ...
- Pytest_简介与安装(1)
一.Pytest简介 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但更灵活.官方网站优点简介: 非常容易上手,入门简单,文档丰富,文档中有很多实例可 ...
- MySQL 截取小数位数
项目中遇到一些有关小数位数截取的问题,留下痕迹,以便后续使用时注意:个人推荐使用方法2),直接四舍五入 1)select FORMAT(1478568.2457,2): 查询出来的结果为: ,每隔3位 ...
- 【基因组学】maker的安装和注释
本文默认读者有一定的生信基础,没有基础的可以阅读以前的笔记内容. maker作为比较受人认可的基因组注释软件,其流程较为清晰简单. 不知何故,我的conda无法安装maker,故而采用手动安装方式. ...
- WAFW00F waf识别工具 源码学习
我实习工作的第一个任务根据已有的java waf识别工具 实现了一个python的waf识别工具 代码结构非常乱 仅仅达到了能用的水平. 顶头svp推荐这个项目当时我已经写好了开始用了自己的 稍微看了 ...
- Keil MDK STM32系列(七) STM32F4基于HAL的PWM和定时器
Keil MDK STM32系列 Keil MDK STM32系列(一) 基于标准外设库SPL的STM32F103开发 Keil MDK STM32系列(二) 基于标准外设库SPL的STM32F401 ...
- 【刷题-LeetCode】229. Majority Element II
Majority Element II Given an integer array of size n, find all elements that appear more than ⌊ n/3 ...