(MAC) PHP安装和配置
下载资源包
安装参考文档:编译 PHP
git clone http://git.php.net/repository/php-src.git
cd php-src
git checkout PHP-7.3
# 或者下载其他的版本资源:git checkout PHP-7.0
但是在checkout的时候需要注意的是bison的版本,具体bison版本对应PHP版本如下:
bison,用于生成 PHP 解析器。
2.4 或更高版本(对于 PHP 7.0-7.3)
3.0 或更高版本(对于 PHP 7.4)
如果提示当前bison版本不匹配,可以尝试配置.bash_profile
PATH=/usr/local/opt/bison/bin/:$PATH
编译安装
执行步骤:
# 如果./configure 不存在,则先执行 `./buildconf`。
# 重新生成 ./configure 执行 `rm -f ./configure && ./buildconf --force`
# ./configure的时候出错记录:
# unrecognized options: --enable-safe-mode, --enable-gd-native-ttf,--with-mcrypt=shared
# configure: error: Couldn't find pcre2-config [--with-pcre-regex=shared]
rm -f ./configure && ./buildconf --force
# 简易配置
./configure -q --prefix=/usr/local/php7.3
sudo make ZEND_EXTRA_LIBS='/usr/local/opt/libiconv-1.16/lib/libiconv.dylib'
sudo make install
# 指定配置项配置, 按以下配置和指定ZEND_EXTRA_LIBS make成功
./configure -q --prefix=/usr/local/php7.3 \
--enable-fpm \
--enable-cli \
--enable-ftp \
--enable-zip \
--enable-calendar \
--enable-dba \
--enable-gd-jis-conv \
--enable-mbstring \
--enable-pcntl \
--enable-shmop \
--enable-sysvsem \
--enable-sysvshm \
--enable-sysvmsg \
--enable-sockets \
--enable-exif \
--enable-soap \
--enable-wddx \
--enable-mysqlnd \
--enable-zend-signals \
--enable-json \
--enable-dom \
--enable-dba \
--enable-xmlreader --enable-xmlwriter --enable-xml \
--enable-inline-optimization \
--enable-hash \
--enable-phar \
--enable-filter \
--enable-pdo \
--with-pdo-mysql=shared,mysqlnd \
--with-pdo-sqlite=shared \
--with-mhash=shared \
--with-libxml-dir=shared \
--with-zlib-dir=/usr/local/opt/zlib \
--with-bz2=/usr/local/opt/bzip2/ \
--with-curl=/usr/local/opt/curl \
--with-pcre-jit \
--with-openssl-dir=/usr/local/opt/openssl@1.1 \
--with-gd=shared \
--with-jpeg-dir=/usr/local/opt/jpeg \
--with-png-dir=/usr/local/opt/libpng \
--with-freetype-dir=/usr/local/opt/freetype \
--with-pic \
--with-icu-dir=/usr/local/opt/icu4c \
--with-xsl=shared \
--with-gettext=shared \
--with-mysqli=shared \
# --enable-maintainer-zts \
# --enable-debug \
# --enable-maintainer-zts 和 --enable-debug 会决定最终生成的扩展目录名称。
# 比如:/usr/local/php7.3/lib/php/extensions/debug-non-zts-20180731/
# --with-tidy=shared \
# --enable-intl \
# sudo make -jN #N是系统内核数,mac通过`sysctl machdep.cpu | grep thread`,我的是4 。
# 前面iconv的问题在make的时候手动指定,或者修改Makefile也行。
sudo make ZEND_EXTRA_LIBS='/usr/local/opt/libiconv-1.16/lib/libiconv.dylib' -j4
sudo make install
但是有些时候这么安装可能并不符合你的需求,我们需要定制化一些参数。
首先需要查看./configure 命令可接受的参数:./configure -h
,然后分析这些参数。
问题及解决
iconv问题
这次编译安装给我带来最大困扰的就是iconv的问题。在启用配置--enable-cli
||--enable--fpm
时都会去找iconv库。如果找不到的话就会报错。
首先碰见这个问题的思路是采取解决make: *** [sapi/cli/php] Error 1
这个问题的方案,但是实践证明这里还会存在一些MAC自带的坑,以及一些我还无法描述的坑。如果执行make失败,可能的原因如下:
(1)–with-iconv=DIR,DIR指定了MAC通过brew安装的libiconv路径
brew install libiconv # brew reinstall libiconv
./configure -q --prefix=/usr/local/php7.3 --with-iconv=/usr/local/opt/libiconv
make # 报错
(2)–with-iconv-dir=DIR,DIR指定了MAC通过brew安装的libiconv路径,还是报错
(3)通过修改Makefile
指定MAC默认的/usr/local/opt/libiconv/lib/libiconv.dylib
,还是报错
(4)通过make ZEND_EXTRA_LIBS='/usr/local/opt/libiconv/lib/libiconv.dylib'
,还是报错
到(3)、(4)这里我已经怀疑不是我的解决方法有问题,而是MAC通过
brew
安装的libiconv
有问题。关于第(1)、(2)的问题我抱有很大的疑惑,因为在指定OpenSSL的DIR时也是类似的--with-openssl-dir=/usr/local/opt/openssl@1.1
但是似乎没有出现OpenSSL的问题。可能是我目前还没碰到罢了,原因不明!
竟然可能是libiconv
的问题,那么解决思路就是重新编译安装一个libiconv
。
(5) 正确执行过程如:
# 编译安装libiconv最新版本
wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.16.tar.gz
tar -zxvf libiconv-1.16.tar.gz && cd libiconv-1.16
./configure --prefix=/usr/local/opt/libiconv-1.16 && make && make install
# 编译安装PHP
./configure -q --prefix=/usr/local/php7.3
sudo make ZEND_EXTRA_LIBS='/usr/local/opt/libiconv-1.16/lib/libiconv.dylib' -j4
make test && sudo make install
1、如下报错,原因是
--with-iconv-dir
找不到iconv的类库,改成--with-iconv
依然报错!
./configure -q –prefix=/usr/local/php7.3 –with-iconv-dir=/usr/local/opt/libiconv-1.16
2、如果安按照(5)执行依然失败,试试nm /usr/local/opt/libiconv-1.16/lib/libiconv.dylib
参考
make: *** [sapi/cli/php] Error 1
这里是找不到iconv
扩展(此方法也可以解决其他找不到路径的问题)。
(1)第一种办法是在Makefile
文件中的EXTRA_LIBS
这行找到-liconv
然后替换成libiconv
的绝对路径/usr/local/opt/libiconv/lib/libiconv.dylib
(2)在执行 make
时指定iconv
的扩展:
./configure -q --prefix=/usr/local/php7.3
sudo make ZEND_EXTRA_LIBS='/usr/local/opt/libiconv/lib/libiconv.dylib'
make: *** [sapi/cgi/php-cgi] Error 1
执行./configure
是指定参数--disable-cgi
configure: error: Please reinstall the BZip2 distribution
brew reinstall bzip2
修改配置--with-bz2=/usr/local/opt/bzip2/
cURL version 7.15.5 or later is required to compile php with cURL support
brew reinstall curl
brew info curl
这个问题和bzip2
的问题类似,最终也是通过配置--with-curl=/usr/local/opt/curl
不再报错!
configure: error: Cannot find OpenSSL’s <evp.h>
修改配置--with-openssl-dir=/usr/local/opt/openssl@1.1
,不再报错!
configure: error: Unable to detect ICU…
brew search icu
brew reinstall icu4c
configure: error:
Due to the way that loadable modules work on OSX/Darwin, you need to
compile the PDO package statically into the PHP core.
暂且移除该配置--enable-pdo=shared
--enable-pdo=shared
configure: error: Cannot find libtidy
MAC上看到的几个似乎不是tidy库
make: *** [sapi/fpm/php-fpm] Error 1
导致错误的原因似乎还是iconv。
make: *** [ext/intl/intl_convertcpp.lo] Error 1
_executor_globals_id
在我本地有两个PHP资源包,一个是7.1,一个是7.3 。7.1的是不知道什么时候下载的,7.3的是通过以上git下载的。然后在原来7.1下和7.3下如上编译安装都成功了。但是在7.1下启动--enable-maintainer-zts
增加扩展mysqli.so
时报错。于是移除zts扩展,再重新编译安装,又报另外一种错误:Symbol not found: _mysqlnd_global_stats
。但是在7.3下是没有报任何错误。可能原因就是资源包的问题了。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: