PHP 8 从源码安装与配置

目录

1. 一、安装依赖

1.1. 安装编译工具及依赖

CentOS Stream 8/9

bash
#sudo yum groupinstall 'Development Tools'
sudo yum install -y \
    gcc gcc-c++ autoconf \
    systemd-devel openssl-devel libcurl-devel \
    oniguruma-devel zlib-devel \
    libwebp-devel libjpeg-turbo-devel freetype-devel libpng-devel \
    libxml2-devel libxslt-devel \
    libsq3-devel libzip-devel file-devel

Debian/Ubuntu

bash
sudo apt install -y pkg-config gcc autoconf \
	libsystemd-dev libssl-dev libcurl4-openssl-dev \
	libonig-dev libzip-dev libsqlite3-dev \
	libwebp-dev libjpeg-dev libfreetype6-dev libpng-dev \
	libxml2-dev  libxslt-dev libgmp-dev libsodium-dev

1.2. 安装 libiconv

bash
wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.18.tar.gz
tar -zxf libiconv-1.18.tar.gz &&\
cd libiconv-1.18 &&\
./configure --prefix=/usr/local/ &&\
make &&\
sudo make install &&\
sudo ln -s /usr/local/lib/libiconv.so.2.7.0 /usr/lib64/ &&\
sudo ldconfig

1.3. 安装 libzip(已过时,选做)

1.3.1. 通过 RPM 安装

https://pkgs.org/download/libzip

bash
yum remove -y libzip
rpm -Uvh http://rpms.remirepo.net/enterprise/7/remi/x86_64//libzip-last-1.1.3-1.el7.remi.x86_64.rpm
rpm -Uvh http://rpms.remirepo.net/enterprise/7/remi/x86_64//libzip-last-devel-1.1.3-1.el7.remi.x86_64.rpm

1.3.2. 手动编译安装

  1. 安装 cmake
bash
wget https://cmake.org/files/v3.26/cmake-3.26.1-linux-x86_64.sh && \
chmod +x cmake-3.26.1-linux-x86_64.sh && \
./cmake-3.26.1-linux-x86_64.sh

mv cmake-3.26.1-linux-x86_64 /usr/local/cmake
ln -s /usr/local/cmake/bin/cmake /usr/local/bin/cmake
  1. 编译安装 libzip
bash
wget https://libzip.org/download/libzip-1.10.0.tar.gz &&\
tar -zxf libzip-1.10.0.tar.gz &&\
cd libzip-1.10.0 &&\
mkdir build &&\
cd build &&\
cmake .. &&\
make &&\
make install
  1. 更新 lib
bash
echo '/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64'>>/etc/ld.so.conf.d/local.conf

ldconfig

1.4. 安装 imap(已过时,选做)

centOS7 已经没有了 libc-client,需要编译安装

注:epel 源可以找到 libc-client-devel uw-imap-devel uw-imap-static uw-imap-utils,但直接安装还是会出现一些问题。

编译安装

bash
wget ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz
tar -zxf imap-2007f.tar.gz
cd imap-2007f
make lr5 PASSWDTYPE=std SSLTYPE=unix.nopwd EXTRACFLAGS=-fPIC IP=4
mkdir -p /usr/local/imap-2007f/{include,lib,c-client}
cp c-client/*.h /usr/local/imap-2007f/include/ && \
cp c-client/*.c /usr/local/imap-2007f/lib/  && \
cp c-client/*.c /usr/local/imap-2007f/c-client/  && \
cp c-client/c-client.a /usr/local/imap-2007f/lib/libc-client.a  && \
cp c-client/c-client.a /usr/local/imap-2007f/c-client/libc-client.a

备注:在 64 位下编译时 make 参数需要带 EXTRACFLAGS=-fPIC ,在 32 位下则不需要。

1.5. 其他 (已过时,选做)

bash
yum install -y libicu-devel libmcrypt-devel pam-devel bison bison-devel re2c

libmcrypt-devel 需要使用 epel 源

bash
dnf config-manager --set-enabled powertools
dnf install epel-release epel-next-release

2. 二、安装 PHP

2.1. 下载软件包

bash
mkdir ~/packages && cd ~/packages && \
wget http://us.php.net/distributions/php-8.4.10.tar.gz  && \
sudo tar zxf php-8.4.10.tar.gz -C /usr/local/src

2.2. 新增用户和组 (选做)

bash
# On Ubuntu/Debian:
sudo addgroup --system --gid 37 www-data  && \
sudo adduser \
    --system \
    --home /usr/local/php \
    --shell /bin/false \
    --uid 37 \
    --gecos 'PHP Server' \
    --gid 37 \
    --disabled-password \
    www-data
bash
# On Fedora/RHEL/CentOS:
sudo groupadd --system www-data  && \
sudo adduser \
   --system \
   --shell /bin/bash \
   --comment 'PHP server' \
   --gid www-data \
   --home-dir /usr/local/php \
   --create-home \
   www-data

2.3. 编译安装

bash
cd /usr/local/src/php-8* && \
sudo ./configure \
  --prefix=/usr/local/php \
  --with-config-file-path=/usr/local/php/etc  \
  --with-config-file-scan-dir=/usr/local/php/conf.d  \
  --enable-fpm  \
  --with-fpm-user=www-data  \
  --with-fpm-group=www-data  \
  --with-fpm-systemd  \
  --with-openssl \
  --with-zlib \
  --enable-bcmath \
  --enable-calendar \
  --with-curl  \
  --enable-exif \
  --enable-ftp \
  --enable-gd  \
  --with-webp  \
  --with-jpeg  \
  --with-freetype  \
  --with-gettext  \
  --with-gmp \
  --with-iconv=/usr/local \
  --with-mhash \
  --enable-mbstring \
  --with-mysqli=mysqlnd \
  --enable-pcntl \
  --with-pdo-mysql=mysqlnd \
  --enable-sockets \
  --with-xsl \
  --with-zip \
  --enable-mysqlnd \
  --with-sodium
bash
#make ZEND_EXTRA_LIBS='-liconv' -j4
sudo make -j4
sudo make install

3. 三、php 配置

3.1. php-fpm.conf 设置

bash
sudo mkdir /var/log/php-fpm/ & \
sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
bash
sudo vim /usr/local/php/etc/php-fpm.conf
bash
pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm/error.log

3.2. www.conf 设置

bash
sudo vim /usr/local/php/etc/php-fpm.d/www.conf
plain
[www]
user = www-data
group = www-data

listen = /dev/shm/php-fpm.sock
listen.allowed_clients = 127.0.0.1
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
listen.allowed_clients = 127.0.0.1

pm = dynamic
pm.max_children = 30
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 20
pm.max_requests = 1024

pm.status_path = /status
ping.path = /ping
access.log = /var/log/php-fpm/$pool.access.log
slowlog = /var/log/php-fpm/$pool.log.slow
request_slowlog_timeout = 10s
request_terminate_timeout = 60

3.3. php.ini 设置

bash
sudo cp php.ini-production /usr/local/php/etc/php.ini
bash
sudo sed -i "s|;*date.timezone =.*|date.timezone = PRC|i" /usr/local/php/etc/php.ini && \
sudo sed -i "s|;*memory_limit =.*|memory_limit = 1024M|i" /usr/local/php/etc/php.ini && \
sudo sed -i "s|;*upload_max_filesize =.*|upload_max_filesize = 2G|i" /usr/local/php/etc/php.ini && \
sudo sed -i "s|;*max_file_uploads =.*|max_file_uploads = 50|i" /usr/local/php/etc/php.ini && \
sudo sed -i "s|;*post_max_size =.*|post_max_size = 2G|i" /usr/local/php/etc/php.ini

3.4. 开机自启动

bash
sudo cp sapi/fpm/php-fpm.service  /usr/lib/systemd/system/ && \
sudo systemctl enable --now php-fpm

3.5. 配置环境变量

bash
sudo vim /etc/profile
bash
PATH=$PATH:/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/nginx/sbin
export PATH
bash
source /etc/profile

4. 四、安装 PHP 扩展

4.1. PHPRedis

bash
git clone https://github.com/phpredis/phpredis.git && \
cd phpredis && \
/usr/local/php/bin/phpize && \
./configure --with-php-config=/usr/local/php/bin/php-config && \
make && sudo make install

4.2. ImageMagick

https://pecl.php.net/package/imagick

安装依赖

bash
sudo yum install autoconf gcc gcc-c++ ImageMagick-devel

下载安装

bash
wget https://pecl.php.net/get/imagick-3.7.0.tgz && \
tar xf imagick-3.7.0.tgz && \
cd imagick-3.7.0 && \
/usr/local/php/bin/phpize && \
./configure --with-php-config=/usr/local/php/bin/php-config && \
make && sudo make install

4.3. php.ini添 加扩展

bash
sudo vim /usr/local/php/etc/php.ini

extension=redis
zend_extension=opcache

sudo systemctl restart php-fpm

5. 五、安装 Composer

bash
curl -O https://getcomposer.org/composer.phar && \
sudo mv composer.phar /usr/local/bin/composer && \
sudo chmod +x /usr/local/bin/composer
ESC