[toc]
php源码安装
1.下载源码包
php国内下载地址
export PHP_VERSION=7.3.19
wget https://mirrors.sohu.com/php/php-${PHP_VERSION}.tar.xz
php官网下载地址
wget https://www.php.net/distributions/php-${PHP_VERSION}.tar.xz
2.安装依赖包
# 安装开发者工具包
yum -y group install "Development Tools"
# 安装依赖包
yum -y install systemd-devel libacl libacl-devel libxml2 libxml2-devel curl curl-devel libjpeg libjpeg-devel libpng libpng-devel gmp-devel libxslt libxslt-devel openssl openssl-devel zlib zlib-devel pcre pcre-devel glib2 glib2-devel bzip2 bzip2-devel glibc glibc-devel liblzf liblzf-devel libzstd libzstd-devel freetype-devel readline-devel
3.解压缩包并编译安装
3.1 编译安装libzip
解决报错 configure: error: Please reinstall the libzip distribution
3.1.1 编译安装libzip需要安装高版本的cmake
# 下载源码包
wget https://github.com/Kitware/CMake/releases/download/v3.16.8/cmake-3.16.8.tar.gz
# 解压缩源码包
tar xf cmake-3.16.8.tar.gz
# 进入解压缩目录并编译安装
cd cmake-3.16.8/
./configure --prefix=/usr/local/cmake
gmake -j`nproc` && make install
# 导出PATH环境变量并使配置生效
echo 'export PATH=/usr/local/cmake/bin:$PATH' >/etc/profile.d/cmake.sh
source /etc/profile
# 验证
$ cmake --version
cmake version 3.16.8
3.1.2 编译安装libzip
# 下载源码包
wget https://libzip.org/download/libzip-1.7.1.tar.xz
# 解压缩源码包
tar xf libzip-1.7.1.tar.xz
# 进入解压缩目录并编译安装
cd libzip-1.7.1
mkdir build && cd build && cmake .. && make -j`nproc` && make install
3.2 编辑配置文件 /etc/ld.so.conf
内容
解决报错configure: error: off_t undefined; check your library configuration
# 备份配置文件
cp /etc/ld.so.conf{,.bak}
# 向配置文件写入以下内容
cat >/etc/ld.so.conf <<EOF
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64
EOF
# 使配置生效
ldconfig -v
3.3 解压缩包编译安装
可以使用
php -i | grep config
查看php编译参数
# 创建www用户
useradd -M www -s /sbin/nologin
# 解压缩包
tar xf php-${PHP_VERSION}.tar.xz
# 进入解压后的目录
cd php-${PHP_VERSION}
# 编译安装
./configure --prefix=/usr/local/php${PHP_VERSION} \
--with-config-file-path=/usr/local/php${PHP_VERSION}/etc \
--with-fpm-user=www \
--with-fpm-group=www \
--with-fpm-systemd \
--with-fpm-acl \
--with-mysql-sock \
--with-mysqli \
--with-libxml-dir \
--with-openssl \
--with-mhash \
--with-pcre-regex \
--with-zlib \
--with-iconv \
--with-bz2 \
--with-curl \
--with-cdb \
--with-pcre-dir \
--with-gd \
--with-openssl-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-freetype-dir \
--with-gettext \
--with-gmp \
--with-mhash \
--with-onig \
--with-pdo-mysql \
--with-zlib-dir \
--with-readline \
--with-libxml-dir \
--with-xsl \
--with-pear \
--enable-fpm \
--enable-soap \
--enable-bcmath \
--enable-calendar \
--enable-dom \
--enable-exif \
--enable-fileinfo \
--enable-filter \
--enable-ftp \
--enable-json \
--enable-mbstring \
--enable-mbregex \
--enable-mbregex-backtrack \
--enable-pdo \
--enable-session \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--enable-sysvmsg \
--enable-sysvsem \
--enable-sysvshm \
--enable-zip \
--enable-mysqlnd-compression-support &&
make -j`nproc` && make install
ubuntu16 ./configure
可能遇到的报错 configure: error: Cannot find OpenSSL's libraries
,先使用命令 find / -name libssl.so
找到文件 libssl.so
,然后做一下软连接即可
ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib
3.4 拷贝 相关文件
3.4.1 创建php安装目录软连接
ln -s /usr/local/php${PHP_VERSION}/ /usr/local/php
3.4.2 导出PATH环境变量
echo 'export PATH=/usr/local/php/bin:$PATH' >/etc/profile.d/php.sh
source /etc/profile
3.4.3 拷贝php.ini文件
cp php-${PHP_VERSION}/php.ini-development /usr/local/php/etc/php.ini
3.4.4 配置php-fpm
方式一 拷贝php-fpm文件
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.conf
方式二 编辑php-fpm文件
这里贴一下生产中php的配置文件
php-fpm.conf
⚠️这里php启动是监听的sock文件,放在了
/tmp
下,如果指定其他目录,则这个目录权限需要设置为php运行用户所有
[global]
pid = /usr/local/php72/var/run/php-fpm.pid
error_log = /usr/local/php72/var/log/php-fpm.error.log
log_level = notice
[www]
listen = /tmp/php73-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 60
pm.start_servers = 30
pm.min_spare_servers = 30
pm.max_spare_servers = 60
pm.max_requests = 1024
pm.process_idle_timeout = 10s
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
3.4.5 拷贝php-fpm服务文件
cp php-${PHP_VERSION}/sapi/fpm/php-fpm.service /usr/lib/systemd/system/php-fpm.service
3.4.6 启动php-fpm
方式一 使用systemd管理
systemctl daemon-reload && systemctl enable php-fpm && systemctl start php-fpm
方式二 指定配置文件直接启动
/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini -y /usr/local/php/etc/php-fpm.conf -D
3.4.7 检查php-fpm启动
# php默认监听tcp/9000端口
$ netstat -ntpl|grep 9000
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 12392/php-fpm: mast
4.结合nginx测试php-fpm功能是否正常
4.1 安装nginx并启动
# 安装nginx
yum -y install nginx
# 配置nginx以www用户运行
sed -i.bak '/^user/c user www;' /etc/nginx/nginx.conf
# 启动nginx
systemctl start nginx
4.2 编辑nginx配置文件
cat >/etc/nginx/conf.d/php-test.conf <<'EOF'
server {
listen 80;
server_name www.pptfz.com;
client_max_body_size 20m;
root /opt;
index index.php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
4.3 重载nginx
# 检测nginx语法
$ nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# 重载nginx
nginx -s reload
4.4 编辑php测试页面
cat >/opt/index.php <<EOF
<?php
phpinfo();
?>
EOF
本机做hosts解析,然后浏览器直接访问域名或IP即可,因为这里配置的nginx根目录下只有一个 index.php
文件,返回结果如下即为成功
5.安装扩展(可选)
5.1 安装redis扩展
5.1.1 安装方法一 pecl安装
pecl install redis
echo "extension=redis.so" >> /usr/local/php/etc/php.ini
5.1.2 安装方法二 源码安装
5.1.2.1 下载包
cd /opt && wget https://github.com/phpredis/phpredis/archive/5.2.2.tar.gz
5.1.2.2 解压缩包并编译安装
# 解压缩包
tar xf 5.2.2.tar.gz
cd phpredis-5.2.2/
# 生成configure文件
phpize
# 编译安装
./configure --with-php-config=/usr/local/php/bin/php-config
make -j`nproc` && make install
# 配置文件中启用redis模块
echo "extension=redis.so" >> /usr/local/php/etc/php.ini
报错1
checking for igbinary includes... configure: error: Cannot find igbinary.h
解决方法
pecl install igbinary
echo "extension=igbinary.so" >> /usr/local/php/etc/php.ini
报错2
checking for msgpack includes... configure: error: Cannot find php_msgpack.h
解决方法
pecl install msgpack
echo "extension=msgpack.so" >> /usr/local/php/etc/php.ini
5.1.2.3 在php配置文件中配置redis扩展
修改
/usr/local/php/etc/php.ini
,新增extension=redis.so
extension=redis.so
5.1.2.4 验证redis扩展是否安装成功
方式一
可以使用 /usr/local/php/bin/php -m |grep redis
查看redis扩展是否安装
/usr/local/php/bin/php -m |grep redis
方式二
往index.php
中写入以下内容
cat > index.php <<EOF
<?php
phpinfo();
?>
EOF
启动php web
# -t后边必须是一个目录,并且index.php就在这个目录下
/usr/local/php/bin/php -S 0.0.0.0:8080 -t ./
浏览器访问 IP:8080
5.2 安装mongo扩展
5.2.1 安装方法一 pecl安装
pecl install mongodb
echo "extension=mongodb.so" >> /usr/local/php/etc/php.ini
5.2.2 安装方法二 源码安装
5.2.2.1 下载包
wget https://pecl.php.net/get/mongodb-1.7.3.tgz
5.2.2.2 解压缩包并编译安装
# 解压缩包
tar xf mongodb-1.7.3.tgz
cd mongodb-1.7.3
# 生成configure文件
phpize
./configure --with-php-config=/usr/local/php/bin/php-config
# 编译安装
make -j`nproc` && make install
# 配置文件中启用mongo模块
echo "extension=mongodb.so" >> /usr/local/php/etc/php.ini