(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.33.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 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!