在 2022 年我入手了人生中的第一台 macbook,在此之前我就在经常在使用黑苹果与WSL进行开发项目。拿到 macos 熟悉了一段时间之后,变摸索出了构建PHP环境的差异处。
同样也制作了一键脚本,开源在 https://github.com/Mfuns-cn/build-php-shell 可以做到开箱即用,但是也推荐阅读过程方便纠错。
示例环境
系统信息
- M1 Pro 8 core
- MacOS Monterey 12.5
- Home-brew https://brew.sh/ (make sure install first)
- 终端 (Terminal.app) 未使用 Rosetta 开启
安装环境
- PHP 8.1.10
- Swoole 4.8.7
- Composer
- Redis 扩展
安装环境依赖
brew install wget autoconf automake libtool re2c bison pkg-config openssl libiconv oniguruma readline pcre2
编译 PHP
下载并解压 PHP 源代码
wget https://www.php.net/distributions/php-8.1.10.tar.gz
tar -xzvf php-8.1.10.tar.gz
编译准备
./configure --prefix="$(pwd)"/macos/php81/php \
--with-external-pcre=$(brew --prefix pcre2) \
--with-openssl=$(brew --prefix openssl) \
--with-iconv=$(brew --prefix libiconv) \
--with-readline=$(brew --prefix readline) \
--enable-mysqlnd \
--with-pdo-mysql \
--with-pdo-mysql=mysqlnd \
--enable-bcmath \
--enable-fpm \
--enable-mbstring \
--enable-phpdbg \
--enable-shmop \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--with-zlib \
--with-curl \
--with-pear \
--enable-pcntl
确保看到如上提示在进行后续操作,反之请先检查环境依赖。
开始编译
make -j $(sysctl -n hw.ncpu)
make install
验证 PHP 环境
cp tmp/php81/php-8.1.3/php.ini-development tmp/php81/php/lib/php.ini
export PATH=${base_dir}"/macos/php81/php/bin:$PATH"
sudo $(pwd)/macos/php81/php/bin/php -v
安装 Swoole
wget https://github.com/swoole/swoole-src/archive/refs/tags/v4.8.7.zip
unzip v4.8.7.zip
cd "swoole-src-4.8.7" || exit
"$(pwd)"/macos/php81/php/bin/phpize
ln -s $(brew --prefix pcre2)/include/pcre2.h "$(pwd)"/macos/php81/php/include/php/ext/pcre/pcre2.h
./configure \
--enable-openssl \
--with-openssl-dir=$(brew --prefix openssl) \
--enable-http2 \
--enable-swoole-curl \
--enable-swoole-json \
--enable-thread-context \
--with-php-config=$(pwd)/macos/php81/php/bin/php-config
make -j $(sysctl -n hw.ncpu)
make install
使用 PECL/PEAR 安装扩展
wget http://pear.php.net/go-pear.phar
sudo $(pwd)/macos/php81/php/bin/php go-pear.phar
sudo $(pwd)/macos/php81/php/bin/pear config-get php_dir
sudo $(pwd)/macos/php81/php/bin/pecl channel-update pecl.php.net
sudo $(pwd)/macos/php81/php/bin/pecl install redis
配置 php.ini 配置文件
echo "memory_limit=1G" >> $(pwd)/macos/php81/php/lib/php.ini
echo "opcache.enable_cli = 'On'" >> $(pwd)/macos/php81/php/lib/php.ini
echo "extension=redis.so" >> $(pwd)/macos/php81/php/lib/php.ini
echo "extension=swoole.so" >> $(pwd)/macos/php81/php/lib/php.ini
echo "swoole.use_shortname = 'Off'" >> $(pwd)/macos/php81/php/lib/php.ini
测试环境
$(pwd)/macos/php81/php/bin/php -v
$(pwd)/macos/php81/php/bin/php -m
$(pwd)/macos/php81/php/bin/php --ri swoole
安装 Composer
cd $(pwd)/macos/php81 || exit
wget https://mirrors.aliyun.com/composer/composer.phar
php composer.phar
设置环境变量
sudo ln -s -f ${pwd}/macos/php81/php/bin/php /usr/local/bin/php
sudo ln -s -f ${pwd}/macos/php81/composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer
提示
遇到一些提示不清楚的选择就直接回车即可,请注意实际情况下的各种文件路径。