本文最后更新于 2057 天前,其中的信息可能已经有所发展或是发生改变。
最近在一台CentOS6.2的机器上部署php7.3,系统有点旧,稍微折腾点。
安装需要的依赖
sudo yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libjpeg libpng freetype libjpeg-devel libpng-devel freetype-devel gmp-devel readline-devel libxslt-devel libmemcached libmemcached-devel -y
编译安装
- 到官网下载最新的稳定版本
注意用户组最好与nginx的保持一致,例如我这里设置与nginx一致的nobody
./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --enable-fpm --with-fpm-user=nobody --with-fpm-group=nobody --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-soap --with-libxml-dir --with-xmlrpc --with-openssl --with-mhash --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl=/usr/local/include/curl/ --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-onig --enable-pdo --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-pear --enable-opcache
make sudo make install
编译期间遇到的问题汇总
- checking for cURL 7.15.5 or greater… configure: error: cURL version 7.15.5 or later is required to compile php with cURL support
实际上我本地已经安装了最新的版本。–with–curl不指定路径的话,会在/usr/include/curl下找头文件。但我本机已有的libcurl貌似没有这些头文件。尝试`yum install curl curl-devel`,报了一个多版本冲突的问题。所以最后还是从curl官网下载了最新的tar包,手动编译安装后,—with–curl指定路径为/usr/local/include/curl/
- configure: error: Please reinstall the libzip distribution
通过yum安装的libzip版本过低,只能到官网下载编译安装。
cd libzip-1.5.2 mkdir build cd build cmake ../ make sudo make install
执行cmake的时候报错:Error when bootstrapping CMake: Cannot find a C++ compiler that supports both C++11 and the specified C++ flags. Please specify one using environment variable CXX. The C++ flags are “”.
原因是yum安装的cmake版本过低,不支持c++11特性。所以到cmake官网下载源码安装,悲剧的是编译cmake需要支持c++11的GCC/G++, 考虑到在这台机器上升级GCC会很麻烦,所以直接下载cmake官方编译好的可执行文件
- redis、memcached扩展到 https://pecl.php.net 搜索下载,编译安装即可。最后在php.ini末尾加上扩展
extension=memcached.so extension=redis.so
php -m 可以查看加载成功的扩展,php –ri 扩展名 可以查看某扩展的具体版本和相关配置
其它需要注意的
- 生产环境务必开启opcache,在php.ini添加 zend_extension=opcache.so
- 对于不依赖php内置的会话的app来说,每次请求都自动开启会话,生成一个session文件是不必要的。编辑php.ini,将session的配置session.auto_start设置为0。
- 如果你的应用依赖于php内置的会话,请务必实现session_set_save_handle方法,将session保存到redis或其他缓存中。否则大量地读写session文件(存储在磁盘),磁盘IO会很大,系统负载就刷刷的上去了。