[关闭]
@kklinan 2017-02-23T23:04:55.000000Z 字数 4301 阅读 3514

PHP7 编译安装

PHP


下载解压

下载地址:http://php.net/downloads.php

  1. cd /usr/local/src/
  2. sudo wget http://cn2.php.net/distributions/php-7.1.2.tar.gz
  3. sudo tar xvf php-7.1.2.tar.gz

编译

  1. cd /usr/local/src/php-7.1.2
  2. sudo ./configure --prefix=/usr/local/php7 \
  3. --with-curl \
  4. --with-freetype-dir \
  5. --with-gd \
  6. --with-gettext \
  7. --with-iconv-dir \
  8. --with-kerberos \
  9. --with-libdir=lib64 \
  10. --with-libxml-dir \
  11. --with-mysqli \
  12. --with-openssl \
  13. --with-pcre-regex \
  14. --with-pdo-mysql \
  15. --with-pdo-sqlite \
  16. --with-pear \
  17. --with-jpeg-dir \
  18. --with-png-dir \
  19. --with-xmlrpc \
  20. --with-zlib \
  21. --enable-fpm \
  22. --enable-bcmath \
  23. --enable-libxml \
  24. --enable-inline-optimization \
  25. --enable-gd-native-ttf \
  26. --enable-mbregex \
  27. --enable-mbstring \
  28. --enable-pcntl \
  29. --enable-shmop \
  30. --enable-soap \
  31. --enable-sockets \
  32. --enable-sysvsem \
  33. --enable-xml \
  34. --enable-zip \
  35. --enable-mysqlnd \
  36. --enable-opcache \
  37. --with-mcrypt \
  38. --with-bz2 \
  39. --with-fpm-user=[用户名] \
  40. --with-fpm-group=[用户组]
  41. #更多编译选项请参考 configure help
  42. sudo make
  43. sudo make install

以下选项生产环境请勿添加:

  1. --enable-debug \
  2. --enable-phpdbg \
  3. --enable-phpdbg-debug

sudo make 时若有如下错误提示

  1. ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_dtor':
  2. /usr/local/src/php-7.1.2/ext/iconv/iconv.c:2565: undefined reference to `libiconv_close'
  3. ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor':
  4. /usr/local/src/php-7.1.2/ext/iconv/iconv.c:2591: undefined reference to `libiconv_open'
  5. ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_append_bucket':
  6. /usr/local/src/php-7.1.2/ext/iconv/iconv.c:2637: undefined reference to `libiconv'
  7. /usr/local/src/php-7.1.2/ext/iconv/iconv.c:2715: undefined reference to `libiconv'
  8. /usr/local/src/php-7.1.2/ext/iconv/iconv.c:2716: undefined reference to `libiconv'
  9. ext/xmlrpc/libxmlrpc/.libs/encodings.o: In function `convert':
  10. /usr/local/src/php-7.1.2/ext/xmlrpc/libxmlrpc/encodings.c:74: undefined reference to `libiconv_open'
  11. /usr/local/src/php-7.1.2/ext/xmlrpc/libxmlrpc/encodings.c:82: undefined reference to `libiconv'
  12. /usr/local/src/php-7.1.2/ext/xmlrpc/libxmlrpc/encodings.c:102: undefined reference to `libiconv_close'
  13. collect2: error: ld returned 1 exit status
  14. 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

  1. sduo vim Makefile
  2. 在以下内容后追加 -liconv,然后重新 make
  3. 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

  1. cd /usr/local/src/
  2. sudo wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
  3. tar xvf libiconv-1.15.tar.gz
  4. cd libiconv-1.15.tar.gz
  5. sudo ./configure --prefix=/usr/local/libiconv
  6. sudo make
  7. sudo make install

安装 libiconv 之后,在 PHP7 源码目录使用 sudo make distcleansudo make clean 清除 PHP 上次构建的痕迹[全部文件(包括 configure 生成的文件)或可编译文件)]。

然后将 configure 中的 --with-iconv-dir 配置目录重新编译:
--with-iconv-dir=/usr/local/libiconv/

准备配置文件及启动脚本

准备 PHP 配置文件(php.ini)

  1. #生产环境
  2. sudo cp /usr/local/src/php-7.1.2/php.ini-production /usr/local/php7/lib/php.ini
  3. #开发环境
  4. 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

其它配置项

准备 PHP-FPM 配置文件(php-fpm.conf)

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
打开以下注释(默认开启)

  1. 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

  1. #老版 PHP 监听 9000,这里监听 9002
  2. listen = 127.0.0.1:9002

启动脚本

  1. sudo cp /usr/local/src/php-7.1.2/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm7
  2. sudo chmod +x /etc/init.d/php-fpm7

命名为 php-fpm7 是为了和老版 PHP 共存。

并添加开机启动

  1. 查看系统服务列表: sudo chkconfig --list
  2. 增加系统服务:sudo chkconfig --add php-fpm7
  3. 开机启动: chkconfig php-fpm7 on

rcconf 或其它

验证

查看 PHP 服务命令:sudo service php-fpm7
查看 PHP 状态: sudo service php-fpm7 status
启动 PHP 服务: sudo service php-fpm7 start

若老版本 PHP 启动报错:

  1. Starting php-fpm /usr/local/php/sbin/php-fpm:
  2. error while loading shared libraries: libiconv.so.2:
  3. 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

性能优化

参考:

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注