源码编译安装PHP 7.1.7

  • 更新时间:5年零232天前
  • 浏览量:3231
  • 发布人:思过崖

一、下载编译安装PHP 5.6.14

1.从PHP官网下载PHP源码安装包,并安装相关依赖
  1. cd /usr/local/src
  2. wget http://php.net/distributions/php-7.1.7.tar.gz
  3. yum install -y libxml2 libxml2-devel.x86_64 libcurl.x86_64 libcurl-devel.x86_64 gd.x86_64 libjpeg-turbo.x86_64 libjpeg-turbo-devel.x86_64 libpng.x86_64 libpng-devel.x86_64 freetype.x86_64 freetype-devel.x86_64 libmcrypt.x86_64 libmcrypt-devel.x86_64
2.解压缩
  1. tar -zxvf php-7.1.7.tar.gz
3.配置
  1. cd php-7.1.7
  2. ./configure --prefix=/usr/local/php/7.1.7 --with-config-file-path=/usr/local/php/7.1.7/etc --with-pdo-mysql={mysql_base_dir} --with-mysqli={mysql_base_dir}/bin/mysql_config --with-jpeg-dir --with-png-dir --with-freetype-dir --with-libxml-dir --with-xmlrpc --with-gd --enable-gd-native-ttf --with-curl --with-gettext --with-pear --enable-calendar --enable-mbstring --enable-sockets --enable-exif --enable-fpm --with-mcrypt --with-mhash --with-openssl --enable-soap --with-iconv-dir --enable-bcmath --enable-shmop --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-inline-optimization --enable-pcntl

4.编译并安装

  1. #如果不加 make ZEND_EXTRA_LIBS='-liconv' ,在 make 的时候可能会出现undefined reference to `libiconv_open',例如我在 centos 7.0 上安装php 7.1.7就出现了这个问题。
  2. #另外一种解决办法就是./configure之后,vi Makefile文件,在EXTRA_LIBS变量上手动添加 `-liconv`,效果和上述方法一样。
  3. make ZEND_EXTRA_LIBS='-liconv'
  4. make install

5. 复制默认的配置文件,启动php

  1. cp /usr/local/src/php-7.1.7/php.ini-production /usr/local/php/7.1.7/etc/php.ini
  2. cp /usr/local/php/7.1.7/etc/php-fpm.conf.default /usr/local/php/7.1.7/etc/php-fpm.conf
  3. cp /usr/local/php/7.1.7/etc/php-fpm.d/www.conf.default /usr/local/php/7.1.7/etc/php-fpm.d/www.conf
  4. pkill -9 php-fpm
  5. /usr/local/php/7.1.7/sbin/php-fpm -c /usr/local/php/7.1.7/etc/php.ini -y /usr/local/php/7.1.7/etc/php-fpm.conf

二、PHP源码编译安装常见问题解决方法

记得在碰到如下问题,使用了解决方法之后,make 之前都先 make clean一下,避免问题受到编译缓存的影响,而没生效。

1.configure: error: Cannot find ldap.h
  1. 解决方法:
  2. yum install openldap
  3. yum install openldap-devel
  4. 一般情况下,Cannot find类型的错误的解决步骤如下:
  5. (1)先用rpmyum查看该软件的标准版与开发版是否已经都有安装
  6. rpm -ql softname;
  7. yum list softname;
  8. yum list softname-devel;
  9. (2)ldap.h这种以“l“”开头的ldap.h库文件找不到,可能是路径配置问题,需要的库文件默认安装在/usr/lib64/目录内,而软件默认查找的是/usr/lib/目录,所以查找不到指定文件。解决方法是:
  10. - 从/usr/lib64目录创建文件软链接到/usr/lib
  11. - 如果使用软链接的方法还是不行,例如当初我安装libiconv库的时候
  12. echo "库文件所在目录的路径" >> etc/ld.so.conf;
  13. (echo "/usr/local/lib" >> etc/ld.so.conf)
  14. 然后执行ldconfig命令更新动态库缓存
2.configure: error: Cannot find ldap libraries in /usr/lib
  1. cp -af /usr/lib64/libldap* /usr/lib/
  2. 上面的解决方法已经用到了是吧,哈哈哈!
3.wrong mysql library version or lib not found
  1. 将--with-mysql=/usr/local/mysql 改为--with-mysql即可
4.virtual memory exhausted: Cannot allocate memory
  1. 主要是因为服务器配置比较低,而编译的时候又需要大量内存,网上找到的简单粗暴的解决方法就是在./configure 的时候加上--disable-fileinfo。但是这种方法会导致系统由于缺少fileinfo扩展,在图片上传等使用场景下会出错,因此不建议使用。比较好的解决方法就是建立虚拟内存来安装,具体如何操作,可以参考:http://www.siguoya.name/pc/home/article/98
5.liconv
  1. /bin/ld: cannot find -liconv
  2. wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz -P /usr/local/src;
  3. tar -zxvf libiconv-1.14.tar.gz && cd libiconv-1.14
  4. ./configure --prefix=/usr/local
  5. 然后在make编译之前还需要一个小小的改动,因为libiconv-1.14有一个Bug,在编译的时候会报错error: gets undeclared here (not in a function).
  6. vi srclib/stdio.in.h
  7. _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");一行
  8. 替换成:
  9. #if defined(__GLIBC__) && !defined(__UCLIBC__) && !__GLIBC_PREREQ(2, 16)
  10. _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
  11. #endif
  12. 注意:结尾的#endif也要包括。
  13. 然后再make && make install即可
6.undefined reference to symbol ‘ber_strdup’
  1. 在./configure中添加 --with-ldap=shared ;
  2. 然后ln -s /usr/lib64/liblber* /usr/lib/ ;