@kklinan
2017-02-23T23:04:55.000000Z
字数 4301
阅读 3514
PHP
下载地址:http://php.net/downloads.php
cd /usr/local/src/
sudo wget http://cn2.php.net/distributions/php-7.1.2.tar.gz
sudo tar xvf php-7.1.2.tar.gz
cd /usr/local/src/php-7.1.2
sudo ./configure --prefix=/usr/local/php7 \
--with-curl \
--with-freetype-dir \
--with-gd \
--with-gettext \
--with-iconv-dir \
--with-kerberos \
--with-libdir=lib64 \
--with-libxml-dir \
--with-mysqli \
--with-openssl \
--with-pcre-regex \
--with-pdo-mysql \
--with-pdo-sqlite \
--with-pear \
--with-jpeg-dir \
--with-png-dir \
--with-xmlrpc \
--with-zlib \
--enable-fpm \
--enable-bcmath \
--enable-libxml \
--enable-inline-optimization \
--enable-gd-native-ttf \
--enable-mbregex \
--enable-mbstring \
--enable-pcntl \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-xml \
--enable-zip \
--enable-mysqlnd \
--enable-opcache \
--with-mcrypt \
--with-bz2 \
--with-fpm-user=[用户名] \
--with-fpm-group=[用户组]
#更多编译选项请参考 configure help
sudo make
sudo make install
以下选项生产环境请勿添加:
--enable-debug \
--enable-phpdbg \
--enable-phpdbg-debug
sudo make 时若有如下错误提示
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_dtor':
/usr/local/src/php-7.1.2/ext/iconv/iconv.c:2565: undefined reference to `libiconv_close'
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':
/usr/local/src/php-7.1.2/ext/iconv/iconv.c:2591: undefined reference to `libiconv_open'
ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_append_bucket':
/usr/local/src/php-7.1.2/ext/iconv/iconv.c:2637: undefined reference to `libiconv'
/usr/local/src/php-7.1.2/ext/iconv/iconv.c:2715: undefined reference to `libiconv'
/usr/local/src/php-7.1.2/ext/iconv/iconv.c:2716: undefined reference to `libiconv'
ext/xmlrpc/libxmlrpc/.libs/encodings.o: In function `convert':
/usr/local/src/php-7.1.2/ext/xmlrpc/libxmlrpc/encodings.c:74: undefined reference to `libiconv_open'
/usr/local/src/php-7.1.2/ext/xmlrpc/libxmlrpc/encodings.c:82: undefined reference to `libiconv'
/usr/local/src/php-7.1.2/ext/xmlrpc/libxmlrpc/encodings.c:102: undefined reference to `libiconv_close'
collect2: error: ld returned 1 exit status
make: *** [sapi/cli/php] 错误 1
参考:
- https://bugs.php.net/bug.php?id=72299
- http://news.php.net/php.bugs/201358
- http://www.cnblogs.com/lovemdx/archive/2013/06/09/3128371.html
解决方法 NO.1
使用如下命令:
sudo make ZEND_EXTRA_LIBS='-liconv'
解决方法 NO.2
sduo vim Makefile
在以下内容后追加 -liconv,然后重新 make
EXTRA_LIBS = -lcrypt -lz -lresolv -lcrypt -lrt -lmcrypt -lltdl -lpng -lz -ljpeg -lcurl -lbz2 -lz -lrt -lm -ldl -lnsl -lxml2 -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lssl -lcrypto -lcurl -lxml2 -lfreetype -lz -lpng12 -lxml2 -lxml2 -lcrypt -lxml2 -lxml2 -lxml2 -lxm l2 -lssl -lcrypto -lcrypt
解决方法 NO.3
这种方式会导致老版本 PHP 加载 libiconv 共享库失败,需设置软连,下文有写。
安装 libiconv
下载地址:http://www.gnu.org/software/libiconv/#downloading
cd /usr/local/src/
sudo wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
tar xvf libiconv-1.15.tar.gz
cd libiconv-1.15.tar.gz
sudo ./configure --prefix=/usr/local/libiconv
sudo make
sudo make install
安装 libiconv 之后,在 PHP7 源码目录使用 sudo make distclean
或 sudo make clean
清除 PHP 上次构建的痕迹[全部文件(包括 configure 生成的文件)或可编译文件)]。
然后将 configure 中的 --with-iconv-dir
配置目录重新编译:
--with-iconv-dir=/usr/local/libiconv/
#生产环境
sudo cp /usr/local/src/php-7.1.2/php.ini-production /usr/local/php7/lib/php.ini
#开发环境
sudo cp /usr/local/src/php-7.1.2/php.ini-development /usr/local/php7/lib/php.ini
查看 PHP 配置选项
/usr/local/php7/bin/php-config
或 /usr/local/php7/bin/php -i | grep ini
或 /usr/local/php7/bin/php -i
设置时区
sudo vim /usr/local/php7/lib/php.ini
date.timezone = "Asia/Shanghai"
查看时区
/usr/local/php7/bin/php -i | grep timezone
其它配置项
略
sudo cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf
sudo vim /usr/local/php7/etc/php-fpm.conf
打开以下注释(默认开启)
include=/usr/local/php7/etc/php-fpm.d/*.conf
sudo cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
配置 www.conf
#老版 PHP 监听 9000,这里监听 9002
listen = 127.0.0.1:9002
sudo cp /usr/local/src/php-7.1.2/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm7
sudo chmod +x /etc/init.d/php-fpm7
命名为 php-fpm7
是为了和老版 PHP 共存。
并添加开机启动
查看系统服务列表: sudo chkconfig --list
增加系统服务:sudo chkconfig --add php-fpm7
开机启动: chkconfig php-fpm7 on
rcconf 或其它
查看 PHP 服务命令:sudo service php-fpm7
查看 PHP 状态: sudo service php-fpm7 status
启动 PHP 服务: sudo service php-fpm7 start
若老版本 PHP 启动报错:
Starting php-fpm /usr/local/php/sbin/php-fpm:
error while loading shared libraries: libiconv.so.2:
cannot open shared object file: No such file or directory failed
需设置共享库软连到/usr/lib
目录:
sudo ln -s /usr/local/libiconv/lib/libiconv.so.2.6.0 /usr/lib/libiconv.so.2
参考: