在Mac下EServer集成环境安装的PHP,可能会没有安装实际开发需要的PHP扩展,比如本文介绍的pcntl,这就需要我们自行安装。尴尬的是,EServer没有类似phpstudy那样简单勾选即可安装的方式。本文本着“授人以渔”愿景以安装pcntl为例详细介绍Mac如何编译安装一个PHP扩展。
EServer 官方PHP扩展安装文档:https://www.kancloud.cn/liu1040063186/easysrv/3145510
sf2018@tck-mac ~ % php -v
PHP 8.0.30 (cli) (built: Feb 19 2024 19:00:21) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
sf2018@tck-mac ~ % php -m | grep pcntl
sf2018@tck-mac ~ % 此处返回空,表示未安装,下文会有已安装的检查结果
到PHP官网下载与第1步查询结果版本一致的PHP的源代码包,官网下载地址:https://www.php.net/releases/,可以在页面上搜索要下载版本号,如本文的8.0.30,下载tar.gz格式。
依次执行下面的命令,中途不报错的话,就会生成我们需要的扩展文件:
# 解压
tar zxvf php-8.0.30.tar.gz
# 进入上一步解压出来的目录如下
cd php-8.0.30/ext/pcntl
# phpize 【切记,很重要】一定执行的是要安装pcntl扩展的PHP的安装目录下phpize,否则可能会报错 fatal error: ‘php.h’ file not found
/Applications/EServer/software/php/php-8.0/bin/phpize
# configure 【切记,很重要】--with-php-config一定使用要安装pcntl扩展的PHP的安装目录下的php-config的路径,也是为了避免报错 fatal error: ‘php.h’ file not found
./configure --with-php-config=/Applications/EServer/software/php/php-8.0/bin/php-config
make && make install
上面执行成功后,查看生成的扩展文件,有pcntl.so表示成功
sf2018@tck-mac pcntl % ls modules
pcntl.la pcntl.so
查看安装pcntl扩展的PHP的扩展目录下是否已经存在 pcntl.so,如果不存在讲上一步生成pcntl.so 复制到要安装pcntl扩展的PHP的扩展目录下。
一般执行了make install 后,系统就会把 make 生成的pcntl.so 复制到扩展目录下。
如果不知道要安装pcntl扩展的PHP的扩展目录在什么位置,请看如下操作步骤:
# 首先查看php.ini文件的位置
sf2018@tck-mac pcntl % php --ini
Configuration File (php.ini) Path: /Applications/EServer/software/php/php-8.0/etc
Loaded Configuration File: /Applications/EServer/software/php/php-8.0/etc/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
# 然后从php.ini中查找扩展目录路径
sf2018@tck-mac pcntl % cat /Applications/EServer/software/php/php-8.0/etc/php.ini | grep extension_dir
extension_dir = "/Applications/EServer/software/php/php-8.0/lib/php/extensions/no-debug-non-zts-20200930"
;extension_dir = "ext"
; Be sure to appropriately set the extension_dir directive.
;sqlite3.extension_dir =
# 然后把modules目录下的pcntl.so复制到php.ini中extension_dir配置的目录下。
# 在php.ini扩展配置区域增加下面的代码,就开启了pcntl扩展
extension=pcntl
sf2018@tck-mac pcntl % php -m | grep pcntl
pcntl
sf2018@tck-mac pcntl %
sf2018@tck-mac pcntl % php --ri pcntl
pcntl
pcntl support => enabled
本文只是实践介绍了pcntl扩展的安装,如果有其扩展安装需求,也可以尝试使用本文的方式。