初探php扩展之MAC下环境配置篇
字数 876 2025-08-26 22:11:35
MAC下PHP扩展开发环境配置指南
0x1 前言
本文详细记录在MAC系统下配置PHP扩展开发环境的过程,包括PHP源码编译、VLD扩展安装、CLion和GDB调试环境配置,以及如何快速创建一个简单的PHP扩展。
0x2 调试环境搭建
0x2.1 获取PHP源码
有两种方式获取PHP源码:
方法一:从GitHub克隆
git clone https://github.com/php/php-src.git
cd php-src
切换分支命令:
PHP 5.3: git checkout PHP-5.3
PHP 5.4: git checkout PHP-5.4
PHP 5.5: git checkout PHP-5.5
PHP 5.6: git checkout PHP-5.6
PHP 7.0: git checkout PHP-7.0
PHP HEAD: git checkout master
方法二:下载特定版本源码
mkdir ~/Desktop/php扩展学习/testphp
cd testphp
wget -c http://mirrors.sohu.com/php/php-7.1.8.tar.gz
tar -zxvf php-7.1.8.tar.gz
0x2.2 编译PHP
编译命令:
./configure --disable-all --enable-debug --prefix=~/Desktop/php扩展学习/testphp/php7
make && make install
参数说明:
--disable-all:不安装任何扩展(必须设置,否则可能编译失败)--enable-debug:开启调试模式--prefix:指定安装目录
0x2.3 设置环境变量
临时设置(仅当前终端有效):
export PATH="/Users/xq17/Desktop/php扩展学习/testphp/php7/bin:$PATH"
永久设置:
sudo vim /etc/paths
# 添加路径:/Users/xq17/Desktop/php扩展学习/testphp/php7/bin
0x2.4 安装VLD扩展
VLD扩展用于劫持opcode,方便调试PHP代码:
cd ~/Desktop/php扩展学习/testphp/php7/bin
git clone https://github.com/derickr/vld.git
cd vld
phpize
./configure
make && make install
配置php.ini:
[vld]
extension=vld.so
测试VLD:
vim simple.php
# 内容:
<?php
$a = 1;
$b = $a + 1;
echo $b;
?>
php -dvld.active=1 simple.php
0x3 开发环境配置
0x3.1 CLion配置
- 安装CLion(官网下载并破解)
- 导入PHP源码项目
- 在根目录创建CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.3)
project(hank)
add_custom_target(makefile COMMAND make && make install
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
- 在sapi/cli/php_cli.c文件的main函数设置断点
- 通过Run -> Debug 'makefile'进行调试
0x3.2 GDB配置(可选)
由于MAC下GDB配置复杂,建议使用Docker:
docker search gdb
docker pull 0utman/ubuntu-php55-gdb-debug
docker run -it --security-opt seccomp=unconfined 0utman/ubuntu-php55-gdb-debug bash
测试GDB:
vim test.php
# 内容:
<?php
$a=1+2;
echo $a;
?>
gdb --args php test.php
# gdb命令:
run
break main
0x4 创建第一个PHP扩展
0x4.1 创建扩展框架
./ext_skel --extname=myfirstextt
0x4.2 修改config.m4
去掉以下行的dnl注释:
PHP_ARG_ENABLE(myfirstextt, whether to enable myfirstextt support,
dnl Make sure that the comment is aligned:
[ --enable-myfirstextt Enable myfirstextt support])
0x4.3 编译安装扩展
phpize
./configure
make
make install
0x4.4 测试扩展
通过dl函数加载:
php -d enable_dl=On -r "dl('myfirstextt.so');confirm_myfirstextt_compiled('test');"
或通过php.ini加载:
extension=myfirstextt.so
0x4.5 添加自定义函数
编辑myfirstextt.c文件:
- 在函数声明部分添加:
PHP_FUNCTION(helloworld);
- 在函数映射部分添加:
const zend_function_entry myfirstextt_functions[] = {
PHP_FE(confirm_myfirstextt_compiled, NULL)
PHP_FE(helloworld, NULL)
PHP_FE_END
};
- 实现函数:
PHP_FUNCTION(helloworld)
{
php_printf("Hello World,xq17! \n");
RETURN_TRUE;
}
- 重新编译并测试:
make && make install
php -d enable_dl=On -r "dl('myfirstextt.so');helloworld();"
0x5 总结
本文详细介绍了在MAC系统下配置PHP扩展开发环境的完整流程,包括:
- PHP源码获取与编译
- VLD扩展安装与配置
- CLion和GDB调试环境搭建
- 创建和开发第一个PHP扩展
后续可以深入研究PHP生命周期、扩展原理,以及如何在扩展层面实现特殊功能。