初探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配置

  1. 安装CLion(官网下载并破解)
  2. 导入PHP源码项目
  3. 在根目录创建CMakeLists.txt文件:
cmake_minimum_required(VERSION 3.3)
project(hank)

add_custom_target(makefile COMMAND make && make install
        WORKING_DIRECTORY ${PROJECT_SOURCE_DIR})
  1. 在sapi/cli/php_cli.c文件的main函数设置断点
  2. 通过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文件:

  1. 在函数声明部分添加:
PHP_FUNCTION(helloworld);
  1. 在函数映射部分添加:
const zend_function_entry myfirstextt_functions[] = {
    PHP_FE(confirm_myfirstextt_compiled, NULL)
    PHP_FE(helloworld, NULL)
    PHP_FE_END
};
  1. 实现函数:
PHP_FUNCTION(helloworld)
{
    php_printf("Hello World,xq17! \n");
    RETURN_TRUE;
}
  1. 重新编译并测试:
make && make install
php -d enable_dl=On -r "dl('myfirstextt.so');helloworld();"

0x5 总结

本文详细介绍了在MAC系统下配置PHP扩展开发环境的完整流程,包括:

  1. PHP源码获取与编译
  2. VLD扩展安装与配置
  3. CLion和GDB调试环境搭建
  4. 创建和开发第一个PHP扩展

后续可以深入研究PHP生命周期、扩展原理,以及如何在扩展层面实现特殊功能。

MAC下PHP扩展开发环境配置指南 0x1 前言 本文详细记录在MAC系统下配置PHP扩展开发环境的过程,包括PHP源码编译、VLD扩展安装、CLion和GDB调试环境配置,以及如何快速创建一个简单的PHP扩展。 0x2 调试环境搭建 0x2.1 获取PHP源码 有两种方式获取PHP源码: 方法一:从GitHub克隆 切换分支命令: 方法二:下载特定版本源码 0x2.2 编译PHP 编译命令: 参数说明: --disable-all :不安装任何扩展(必须设置,否则可能编译失败) --enable-debug :开启调试模式 --prefix :指定安装目录 0x2.3 设置环境变量 临时设置(仅当前终端有效): 永久设置: 0x2.4 安装VLD扩展 VLD扩展用于劫持opcode,方便调试PHP代码: 配置php.ini: 测试VLD: 0x3 开发环境配置 0x3.1 CLion配置 安装CLion(官网下载并破解) 导入PHP源码项目 在根目录创建CMakeLists.txt文件: 在sapi/cli/php_ cli.c文件的main函数设置断点 通过Run -> Debug 'makefile'进行调试 0x3.2 GDB配置(可选) 由于MAC下GDB配置复杂,建议使用Docker: 测试GDB: 0x4 创建第一个PHP扩展 0x4.1 创建扩展框架 0x4.2 修改config.m4 去掉以下行的 dnl 注释: 0x4.3 编译安装扩展 0x4.4 测试扩展 通过dl函数加载: 或通过php.ini加载: 0x4.5 添加自定义函数 编辑myfirstextt.c文件: 在函数声明部分添加: 在函数映射部分添加: 实现函数: 重新编译并测试: 0x5 总结 本文详细介绍了在MAC系统下配置PHP扩展开发环境的完整流程,包括: PHP源码获取与编译 VLD扩展安装与配置 CLion和GDB调试环境搭建 创建和开发第一个PHP扩展 后续可以深入研究PHP生命周期、扩展原理,以及如何在扩展层面实现特殊功能。