1、配置PHP构建环境
女主宣言
今天小编为大家分享编写PHP扩展的系列文章,文章从环境构建到扩展编写,会对使用到的相关PHP内核数据结构及API进行介绍,希望能对大家有所帮助。
PS:丰富的一线技术、多元化的表现形式,尽在“360云计算”,点关注哦!
众所周知PHP语言是由C语言编写,我们今天介绍的PHP扩展也是由C语言来进行开发的。所以在编写PHP扩展时,就需要考虑内存管理、数组边界以及其他底层语言的相关问题。因此,在编写PHP扩展时,很难说不会产生任何错误,所以就需要进行相应的调试。所以我们建议在Linux环境下,创建一个“DEBUG”的PHP构建环境,有助于更早的发现相关问题。
基于Linux从源码构建PHP也不会太复杂。但是,首先需要安装必要的开发组件,其中包括C编译器、链接器、库以及头文件。我们使用Linux的包管理器来进行操作。
Ubuntu/Debian环境:
$ sudo apt-get install build-essential autoconf automake bison flex re2c gdb \libtool make pkgconf valgrind git libxml2-dev libsqlite3-dev
RedHat/Fedora环境:
$ sudo dnf install gcc gcc-c++ binutils glibc-devel autoconf automake bison \flex re2c gdb libtool make pkgconf valgrind git \libxml2-devel libsqlite3x-devel
现在,我们可以从github克隆PHP GIT库,然后切换到所需的PHP版本(默认使用master分支或新版的PHP 8)。
$ git clone https://github.com/php/php-src.git
$ cd php-src
$ git checkout php-7.4.1 (switch to tag/branch of necessary PHP version)
接下来,配置PHP。我们将构建一个“DEBUG”版本的PHP,安装到home目录并且使用自定义的php.ini配置文件。“./configure”命令可以使用附近选项扩展,具体取决于你的PHP构建需求。可以指定:
使用哪种SAPI(CLI、FastCGI、FPM、Apache)
启用或禁用嵌入式PHP扩展及其选项
想要获取完整的配置选项,可以执行“./configure -help”查看。
$ ./buildconf --force
$ ./configure --enable-debug \--prefix=$HOME/php-bin/DEBUG \--with-config-file-path=$HOME/php-bin/DEBUG/etc
通常,需要与现有已安装版本进行相似的构建配置。为了节省时间,可以使用“php -i | grep ‘Configure Command’”获取现有构建的配置选项,并添加到“./configure”命令中。注意,构建一些PHP扩展可能需要安装其他库或者头文件,通常在此步骤中检查所有程序包依赖项。
最后,当configure成功时,编译并安装PHP构建:
$ make -j4
$ make install
$ cd ..
现在我们需要创建自定义的php.ini:
$ mkdir ~/php-bin/DEBUG/etc
$ vi ~/php-bin/DEBUG/etc/php.ini
应包含以下内容,启用错误报告并尽早发现可能的错误:
date.timezone="Asia/Shanghai"
max_execution_time=30
memory_limit=128Merror_reporting=E_ALL | E_STRICT ; catch all error and warnings
display_errors=1
log_errors=1zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.protect_memory=1 ; catch invalid updates of shared memory
将PHP添加到PATH环境变量中,覆盖系统中的PHP:
$ export PATH=~/php-bin/DEBUG/bin:$PATH
检查是否一切正常:
$ php -v
输出类似以下内容:
PHP 7.4.1 (cli) (built: Jan 15 2020 12:52:43) ( NTS DEBUG )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologieswith Zend OPcache v7.4.1, Copyright (c), by Zend Technologies
“DEBUG”PHP构建已准备好,下一步进行开发。
如果大家有什么建议或疑问,可以在下方留言交流。
360云计算
由360云平台团队打造的技术分享公众号,内容涉及数据库、大数据、微服务、容器、AIOps、IoT等众多技术领域,通过夯实的技术积累和丰富的一线实战经验,为你带来最有料的技术分享
1、配置PHP构建环境相关推荐
- 【Groovy】Gradle 构建工具 ( 自动下载并配置构建环境 | 提供 API 扩展与开发工具集成 | 内置 Maven 和 Ivy 依赖管理 | 使用 Groovy 编写构建脚本 )
文章目录 一.Gradle 自动下载并配置构建环境 二.Gradle 提供 API 扩展与开发工具集成 三.Gradle 内置 Maven 和 Ivy 依赖管理 四.Gradle 使用 Groovy ...
- fis3 html 变量替换,fis3配置之分环境(media)构建
本博客不欢迎:各种镜像采集行为,请尊重知识产权法律法规.大家都是程序员,不要闹得不开心. 继续fis3前端构建的学习旅程,苏南大叔在本文中继续实践的参数是media参数.这个参数不知道是哪位大神命名的 ...
- Gradle 构建环境变量配置
一.前言 Gradle 提供多种机制用于配置 Gradle 和 指定项目的性能.开发者可以通过配置各种属性,用以提高Gradle的性能,以及实现某些特殊的构建需求(比如网络代理) 二.Gradle 属 ...
- jenkins设置执行时间_Jenkins环境搭建(4)-配置定时构建
每次手动触发job构建,是很麻烦的一件事情,job中可以配置定时构建,今天就来分享下定时构建:构建分为两种:定时构建和轮询SCM. 一.定时构建 Jenkins采用了著名的UNIX任务调度工具CRON ...
- 第2章 构建环境——安装Oracle 9i
第2章 构建环境--安装Oracle 9i 2.1. 安装完数据库服务器后,还需要在同一台计算机上独立安装管理客户机吗?为什么? 解答:不需要.数据库服务器安装完成后包括3部分: ...
- Dockerfile文件创建centos:7,配置JDK8的环境变量,与运行springboot的jar包,的镜像
DockerFile文件创建centos:7 配置JDK8的环境变量 与运行springboot的jar包 准备文件 一:官网下载Linux的JDK包 https://www.oracle.com/j ...
- springboot 常用配置之多环境配置(开发环境、测试环境、生产环境等)
在上一课中我们通过idea工具没有做任何配置就构建了一个springboot项目,并且已经成功启动了,但我们都很清楚这些都远远不能达到我们实际项目的需求,比如我们要引入我们自己的redis配置.mys ...
- WPF 框架全构建环境虚拟机硬盘分享
现在 WPF 完全开源了,咱可以构建自己私有的版本.我分享一个虚拟机硬盘给你,只要你下载下来,通过 VMWare 导入,即可无需任何配置,拿到一个能构建 WPF 官方源代码的全构建环境.可以用来只做你 ...
- 在Visual Studio Code中配置GO开发环境
一.GO语言安装 详情查看:GO语言下载.安装.配置 二.GoLang插件介绍 对于Visual Studio Code开发工具,有一款优秀的GoLang插件,它的主页为:https://github ...
最新文章
- 【pytorch】torch.nn.GroupNorm的使用
- zookeeper安装教程(zookeeper3.4.5为例)
- JavaWeb学习笔记——XML简介
- 算法设计与分析课程的时间空间复杂度
- Nature:科学家首次实现肉眼可见的量子纠缠
- LINUX静态网络配置
- Docker常用操作命令(二)
- tfidf处理代码_tfidf.txt
- 深入进货单-价格跟踪----宇然电脑公司管理软件
- superset0.34源码级别汉化
- 【PAT - 甲级1004】Counting Leaves (30分) (dfs,递归)
- mvc html.radiobutton 选中,asp.net-mvc - 如何使用RadioButtonFor选择单选按钮中的任何一个并包含if else语句 - 堆栈内存溢出...
- ConstraintLayout 完全解析 快来优化你的布局吧
- cnpack转换dfm文件
- apdu 移动sim_SIM卡APDU指令
- cogs2235 烤鸡翅 贪心
- python 流水作业调度_动态规划——流水作业调度问题
- 10 Kafka集群与运维
- 原生JS实现任意数据的动态表格
- 记录一下自己爬虎牙LOL主播的爬虫思路