由于把macOS的系统回退到了10.15,系统重做了,最近在给php安装扩展的时候遇到了一系列问题,例如phpize无法执行,macOS默认的扩展无法安装,找不到php.ini的目录等等,经过一系列操作终于搞定,顺便做个记录,我们只说问题和解决方案。
#检查PHP信息
#不需要任何浏览器,在Linux/MacOS 终端中也可以获得相同的结果。在L命令行中执行 /var/www/html/phpinfo.php ,如:
# php -f /var/www/html/phpinfo.php
#由于输出结果太大,我们可以通过管道将上述输出结果输送给 less 命令,这样就可以一次输出一屏了,命令如下:
# php -f /var/www/html/infophp.php | less
#这里,‘-r‘ 选项会让PHP代码在Linux终端中不带 < 和 > 标记直接执行
# php -r 'phpinfo();'
MacOS中没有默认的php.ini文件,但是有对应的模版文件php.ini.default,位于:
/etc/php.ini.deault
#默认是没有php.ini的,可以复制一份并重命名为php.ini
sudo cp /etc/php.ini.default /etc/php.ini
/usr/bin/phpize
grep: /usr/include/php/main/php.h: No such file or directory
grep: /usr/include/php/Zend/zend_modules.h: No such file or directory
grep: /usr/include/php/Zend/zend_extensions.h: No such file or directory
Configuring for:
PHP Api Version:
Zend Module Api No:
Zend Extension Api No:
解决方案: A)打开命令行终端,运行以下命令,打印macOS sdk路径:
xcrun --show-sdk-path
#若执行成功则输出:
/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
#如果执行失败,则需要安装xcode-select,然后继续打印sdk路径:
xcode-select --install
B)在当前用户下面创建文件夹php-home,复制程序phpize和php-config到 php-home目录。
mkdir ~/php-home/
cp /usr/bin/phpize ~/php-home/
cp /usr/bin/php-config ~/php-home/
查看当前用户PHP版本:
grep version= ~/php-home/php-config
#若执行成功则输出:
version="7.3.29"
C)分别下载phpize(通用)和php-config(分版本)的MaxOS通用补丁
phpize补丁内容:
--- /usr/bin/phpize 2019-09-11 02:46:18.000000000 +0200
+++ ./phpize 2019-12-26 23:10:32.000000000 +0100
@@ -1,11 +1,12 @@
#!/bin/sh
# Variable declaration
+XCODE_SDK_ROOT=$(/usr/bin/xcrun --show-sdk-path)
prefix='/usr'
datarootdir='/usr/php'
exec_prefix="`eval echo ${prefix}`"
phpdir="`eval echo ${exec_prefix}/lib/php`/build"
-includedir="`eval echo ${prefix}/include`/php"
+includedir="`eval echo ${XCODE_SDK_ROOT}${prefix}/include`/php"
builddir="`pwd`"
SED="/usr/bin/sed"
php7.3.11版本php-config补丁内容如下:
--- /usr/bin/php-config 2019-09-11 02:48:43.000000000 +0200
+++ ./php-config 2019-12-26 23:10:19.000000000 +0100
@@ -1,12 +1,14 @@
#! /bin/sh
+XCODE_SDK_ROOT=$(/usr/bin/xcrun --show-sdk-path)
+
SED="/usr/bin/sed"
prefix="/usr"
datarootdir="/usr/php"
exec_prefix="${prefix}"
version="7.3.9"
vernum="70309"
-include_dir="${prefix}/include/php"
+include_dir="${XCODE_SDK_ROOT}${prefix}/include/php"
includes="-I$include_dir -I$include_dir/main -I$include_dir/TSRM -I$include_dir/Zend -I$include_dir/ext -I$include_dir/ext/date/lib"
ldflags=" -L$SDKROOT/usr/lib -L$SDKROOT/usr/local/libressl/lib -L/usr/local/lib"
libs="-lresolv -lcrypto -lssl -lcrypto -lexslt -ltidy -lresolv -ledit -lncurses -lpq -lpq -lldap -llber -liconv -liconv -lpng -lz -ljpeg -lcrypto -lssl -lcrypto -lbz2 -lz -lcrypto -lssl -lcrypto -lm -lxml2 -lz -licucore -lm -lkrb5 -lcurl -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lnetsnmp -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxml2 -lz -licucore -lm -lxslt -lxml2 -lz -licucore -lm "
D)给php-home文件夹中的phpize和php-config进行打补丁,新建php-home文件夹进行隔离是为了不影响默认phpize和php-config的配置,执行如下命令:
#PHP 7.3.9操作方法:
patch ~/php-home/phpize < ~/Downloads/phpize-catalina.patch
patch ~/php-home/php-config < ~/Downloads/php-config-7.3.9-catalina.patch
#PHP 7.3.11操作方法:
patch ~/php-home/phpize < ~/Downloads/phpize-catalina.patch
patch ~/php-home/php-config < ~/Downloads/php-config-7.3.11-catalina.patch
到目前为止,phpize执行报错,默认phpize在/usr/bin/phpize,直接执行会报“php.h: No such file or directory”已经解决完毕,可以找一个对应版本的扩展目录,执行一下phpize查看效果:
leeblog@leeblogMacBook-Pro mysqli % ~/php-home/phpize
Configuring for:
PHP Api Version: 20180731
Zend Module Api No: 20180731
Zend Extension Api No: 320180731
#如果 phpize 输出以下内容, 就代表我们需要安装autoconf
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.
解决方案:
#下载autoconf
curl -OL http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
#解压包
tar xzf autoconf-2.69.tar.gz
cd autoconf-2.69
#编译安装
./configure --prefix=/usr/local
make
sudo make install
安装完autoconf后继续执行phpize,报错会消失,问题解决。
macOS默认的PHP在编译安装php扩展时,做include软连接的时候,常见的有两种错误:
A)第一种情况:operation not permitted 解决办法:
1.重启您的Mac,并在开机时长按command + R
2.进入之后,找到终端,执行代码:csrutil disable,关闭系统保护
备注:如果你后面想重新开启系统保护,执行:csrutil enable
B)第二种情况:ln: /usr/include: Read-only file system 解决方案:
#执行代码(非重启状态下解除系统的写保护):
sudo mount -uw
#重新进行phpize
sudo phpize
#再次编译,并标明php-config的路径
./configure --with-php-config=/usr/bin/php-config
#编译、安装,执行成功后在php.ini中开启相应扩展,整个流程走完
sudo make && sudo make install
到目前为止,在macOS重装php环境是遇到的这一些列问题,做了一个简单总结,后续有问题会随时更新,欢迎喜欢编程的小伙伴一起来交流,共同进步,也欢迎大家多关注我的博客leeblog:blog.ruizelee.com
还没有人发表评论