• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在 centOS9 上编译安装 PHP8

    安装准备

    安装oniguruma,下载网址:https://github.com/kkos/oniguruma/releases

    cd /usr/local/src
    wget -c https://github.com/kkos/oniguruma/releases/download/v6.9.8/onig-6.9.8.tar.gz --no-check-certificate
    

    若上面命令下载从提示超时,那么就自己手工下载。然后复制到/usr/local/src目录下。

    cd /usr/local/src
    tar -zxf onig-6.9.8.tar.gz
    cd /usr/local/src/onig-6.9.8
    
    autoreconf -vfi
    ./configure --prefix=/usr --libdir=/usr/lib64   # 注意:此处安装路经不省略,若省略,php make时提示找不到该包
    
    make
    make install
    
    • --prefix=/usr不省略,若省略,php make时提示找不到该包。
    • --libdir=/usr/lib64如果不使用这个参数,编译 PHP 仍将报错,编辑 ldconfig 配置无法解决问题。

    装PHP过程中出现如下错误信息:
    No package 'oniguruma' found
    Consider adjusting the PKG_CONFIG_PATH environment variable if you
    installed software in a non-standard prefix.
    Alternatively, you may set the environment variables ONIG_CFLAGS
    and ONIG_LIBS to avoid the need to call pkg-config.
    See the pkg-config man page for more details.

    这个错误信息是由于mbstring的正则功能需要oniguruma的支持,编译PHP的时候使用了“--enable-mbstring”参数,系统中却没有oniguruma库。不使用mbstring的正则功能,即在“--enable-mbstring”后再添加“--disable-mbregex”参数。这样的配置将不再需要oniguruma库。

    装PHP过程中出现如下错误信息:
    Package 'oniguruma', required by 'virtual:world', not found
    configure: error: Package requirements(oniguruma)were not met:

    需要使用这个命令安装:dnf --enablerepo=powertools install oniguruma-devel

    或(如果报错)
    dnf --enablerepo=PowerTools install oniguruma-devel


    下载解压 PHP8

    下载地址:https://www.php.net/downloads

    cd /usr/local/src
    wget -c https://www.php.net/distributions/php-8.2.8.tar.gz --no-check-certificate
    tar -zxf php-8.2.8.tar.gz
    
    cd /usr/local/src/php-8.2.8
    

    编译php

    ./configure --prefix=/usr/local/php \
    --with-config-file-path=/usr/local/php/etc \
    --with-fpm-user=www \
    --with-fpm-group=www \
    --enable-fpm \
    --enable-mysqlnd \
    --enable-pdo \
    --enable-gd \
    --enable-exif \
    --enable-intl \
    --enable-calendar \
    --enable-filter \
    --enable-session \
    --enable-bcmath \
    --enable-shmop \
    --enable-sysvsem \
    --enable-simplexml \
    --enable-xml \
    --enable-mbregex \
    --enable-mbstring \
    --enable-opcache \
    --enable-pcntl \
    --enable-soap \
    --enable-sockets \
    --enable-sysvsem \
    --enable-static \
    --enable-tokenizer \
    --enable-fileinfo \
    --enable-cli \
    --with-mysqli \
    --with-pdo-mysql \
    --with-pdo-sqlite \
    --with-curl \
    --with-bz2 \
    --with-jpeg \
    --with-gettext \
    --with-freetype \
    --with-kerberos \
    --with-libdir=lib64 \
    --with-openssl \
    --with-zlib \
    --with-mhash \
    --with-pear \
    --with-iconv \
    --with-pcre-jit
    
    

    便于复制,可以复制下面的编译命令

    ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-fpm-user=www --with-fpm-group=www --enable-fpm --enable-mysqlnd --enable-pdo --enable-gd --enable-exif --enable-intl --enable-calendar --enable-filter --enable-session --enable-bcmath --enable-shmop --enable-sysvsem --enable-simplexml --enable-xml --enable-mbregex --enable-mbstring --enable-opcache --enable-pcntl --enable-soap --enable-sockets --enable-sysvsem --enable-static --enable-tokenizer --enable-fileinfo --enable-cli --with-mysqli --with-pdo-mysql --with-pdo-sqlite --with-curl --with-bz2 --with-jpeg --with-gettext --with-freetype --with-kerberos --with-libdir=lib64 --with-openssl --with-zlib --with-mhash --with-pear --with-iconv --with-pcre-jit
    

    继续安装

    make
    make install
    

    安装php8


    设置php

    cp /usr/local/src/php-8.2.8/php.ini-production /usr/local/php/etc/php.ini
    ln -s /usr/local/php/etc/php.ini /etc/php.ini
    
    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
    

    做软链,以便直接用 php 命令运行

    ln -s /usr/local/php/bin/php /usr/local/sbin/php
    ln -s /usr/local/php/bin/phpize /usr/local/sbin/phpize
    ln -s /usr/local/php/bin/pecl /usr/local/sbin/pecl
    

    建立软链接后,查看php版本

    php -v
    

    查看已经加载的模块

    php -m | less
    

    查看 php 配置文件

    php -i | grep ini
    


    配置 php.ini

    php.ini 是 php 运行核心配置文件

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

    再测试环境下,需要修改内容如下:

    date.timezone="Asia/Shanghai"
    
    memory_limit = 256M
    
    file_uploads = On
    upload_tmp_dir = "/tmp"
    upload_max_filesize = 20M
    post_max_size = 28M
    
    
    [mbstring]
    mbstring.language=Chinese
    mbstring.internal_encoding = UTF-8
    
    [opcache]
    opcache.enable=1
    opcache.enable_cli=1
    
    
    [Pcre]
    pcre.backtrack_limit=99999999
    pcre.recursion_limit=99999999
    
    [Pdo_mysql]
    pdo_mysql.default_socket=/usr/local/mysql/run/mysqld.sock
    
    [MySQLi]
    mysqli.default_socket =/usr/local/mysql/run/mysqld.sock
    
    [Session]
    session.save_path = "/tmp"
    
    

    php.ini中,设置图片文件上传大小的方法:

    • file_uploads:是否允许通过 HTTP 上传文件的开关,默认 On,即是开,允许上传。
    • upload_tmp_dir:上传文件放置的临时目录。在 Windows 默认C:/windows/temp,在 Linux 默认/tmp。若自己修改了此位置,需要保证 PHP 执行者,拥有写入权限。
    • max_file_uploads:允许同时上传的最大文件数。单次提交的表单中,所上传文件的最大数量。默认值 20。
    • upload_max_filesize:允许上传文件大小的最大值。单次提交的表单中,所有上传文件的数据总量。默认 2M。
    • post_max_size:在采用 POST、PUT 等方法,一次表单提交中 PHP 所能够接收的最大数据量。需要将此值改为比upload_max_filesize要大些,因为此值含有,有表单字段内容数据+上传文件数据。。默认值 8M。如果 POST 数据超出限制,那么$_POST$_FILES将会为空。另外,该值应当于memory_limit值。
    • memory_limit:限制 PHP 进程对于内存的使用。是指定单个PHP 脚本程序,可以使用的最大内存容量。为了避免正在运行的脚本大量使用系统可用内存,主要是为了防止程序 bug,或者死循环占用大量的内存,导致系统宕机。默认值 128 M。此值应当适当大于post_max_size的值。
    • max_input_time:脚本解析输入数据(POST、GET、PUT 等数据)允许的最大时间。它从接收所有数据到开始执行脚本进行测量的。默认值 60,单位是秒。max_input_time计时完毕后,才进入max_execution_time计时。
    • max_execution_time:每个 PHP 脚本的最大可执行时间。这设置了脚本被解析器中止之前允许的最大执行时间。默认值 30,单位是秒。从命令行(CLI 模式)运行 PHP 时,默认值 0。这有助于防止写得不好的脚本占尽服务器资源。当脚本进入了一个无限循环状态时,此变量非常有用。然而,当存在一个需要很长时间完成的合法活动时(例如上传大型文件),这项功能也会导致操作失败。在这样的情况下必须考虑将此变量值增加。


    配置 php-fpm.conf

    php-fpm.confphp-fpm进程服务的配置文件

    cd /var/log/
    touch php-fpm.log
    chown www:www /var/log/php-fpm.log
    
    cd /usr/local/php
    mkdir -p /usr/local/php/run
    chown -R www:www /usr/local/php/run
    

    配置 php-fpm.conf

    vim /usr/local/php/etc/php-fpm.conf
    
    pid = /usr/local/php/run/php-fpm.pid
    error_log = /var/log/php-fpm.log
    daemonize = yes
    


    配置 www.conf

    www.conf 这是 php-fpm 进程服务的扩展配置文件:

    vim /usr/local/php/etc/php-fpm.d/www.conf
    

    www.conf 默认配置,不需要修改。其内容:

    user = www
    group = www
    listen = 127.0.0.1:9000
    pm = dynamic
    

    nginx 和 php-fpm 的进程间通信有两种方式
    一种是TCP,一种是UNIX Domain Socket。其中TCP是IP加端口,可以跨服务器。而UNIX Domain Socket不经过网络,只能用于 Nginx 跟 PHP-FPM 都在同一服务器的场景。

    tcp方式开启:
    user = www
    group = www
    listen = 127.0.0.1:9000

    tcp方式注释掉:
    ;listen.owner = www
    ;listen.group = www
    ;listen.mode = 0666

    socket方式开启:
    listen =/usr/local/php/run/php-fpm.sock
    listen.owner = www
    listen.group = www
    listen.mode = 0666

    socket方式注释掉:
    ;user = www
    ;group = www


    php-fpm 指定 php.ini 路径

    /usr/local/php/sbin/php-fpm  -y /usr/local/php/etc/php-fpm.conf -c /etc/php.ini
    


    event 扩展

    PHP 有大量的扩展可以使用,比如用于连接数据库的扩展 mysqli,图形库 gd2 等。扩展有两种安装方法:

    • pecl安装。PECL(PHP Extension Community Library),是一个开放的并通过 PEAR(PHP Extension and Application Repository,扩展和应用仓库),打包格式来打包安装的 PHP 扩展库仓库。通过 PEAR 的 Package Manager 的安装管理方式,可以对 PECL 模块进行下载和安装。通过pear install xxx安装
    • phpize源码编译安装。

    使用 phpize 添加 event 扩展

    event 扩展https://pecl.php.net/package/event

    cd /usr/local/src
    wget -c https://pecl.php.net/get/event-3.0.8.tgz --no-check-certificate
    tar -zxf event-3.0.8.tgz
    
    cd /usr/local/src/event-3.0.8
    
    phpize
    ./configure --with-php-config=/usr/local/php/bin/php-config
    
    make && make install
    

    编译安装完成之后,在/usr/local/php/lib/php/extensions/no-debug-non-zts-20220829目录下,生成的event.so文件,目录已经默认被php.ini加载,但event.so文件需要手工添加。

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

    在 extension 设置的最后一行加入如下配置:

    extension=event.so
    

    安装php扩展event

    查看 event 库插件是否安装成功

    php -m | grep event
    


    安装 PHP 调式工具 Xdebug

    PHP Xdebug是一个开放源代码的 PHP 程序调试器,即一个 Debug 工具,可以用来跟踪,调试和分析 PHP 程序的运行状况。

    下载最新版的 Xdebug

    cd /usr/local/src/
    
    wget -c https://xdebug.org/files/xdebug-3.2.2.tgz  --no-check-certificate
    tar -zxf xdebug-3.2.2.tgz
    

    使用 phpize 添加 xdebug 扩展

    # 进入解压目录
    cd /usr/local/src/xdebug-3.2.2
    
    # 启动 phpize
    phpize
    
    # 编译
    ./configure --enable-xdebug --with-php-config=/usr/local/php/bin/php-config
    
    # 安装测试
    make test
    
    # 安装
    make && make install
    

    译安装完成之后,在/usr/local/php/lib/php/extensions/no-debug-non-zts-20220829目录下,生成的xdebug.so文件。添加扩展:

    vim /usr/local/php/etc/php.ini
    
    extension=event.so
    zend_extension=xdebug.so
    
    [Xdebug]
    ;显示默认的错误信息
    xdebug.default_enable=on
    
    ;自动打开“监测函数调用过程”的功模。该功能可以在你指定的目录中将函数调用的监测信息以文件的形式输出。此配置项的默认值为 off。
    xdebug.auto_trace=on
    
    ;打开收集“函数参数”的功能。将函数调用的参数值列入函数过程调用的监测信息中。此配置项的默认值为 off。
    xdebug.collect_params=on
    
    
    ;打开收集“函数返回值”的功能。将函数的返回值列入函数过程调用的监测信息中。此配置项的默认值为 off。
    xdebug.collect_return=on
    
    xdebug.max_nesting_level=100
    
    ;打开效能监测器。
    xdebug.profiler_enable=on
    
    ;是否远程调试
    xdebug.remote_enable=on
    
    ;远程调试地址
    xdebug.remote_host=localhost
    
    ;远程调试端口
    xdebug.remote_port=9000
    
    ;远程连接协议
    xdebug.remote_handler=dbgp
    
    ;设定函数调用监测信息的输出文件的路径。
    xdebug.trace_output_dir="/tmp"
    
    ;设定效能监测信息输出文件的路径
    xdebug.profiler_output_dir="/tmp"
    

    必须重启重启 php-fpmphpinfo()才能显示出来 xdebug 已经被加载运行。

    systemctl restart php-fpm
    
    # 查看是否安装成功
    php -m | grep xdebug
    



    启动 php-fpm

    开机自启动

    设置开机自启动 php-fpm。新建php-fpm服务文件

    vim /usr/lib/systemd/system/php-fpm.service
    

    内容如下:

    [Unit]
    Description=The PHP FastCGI Process Manager
    After=syslog.target network.target remote-fs.target nss-lookup.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/php/run/php-fpm.pid
    ExecStart=/usr/local/php/sbin/php-fpm
    ExecReload=/bin/kill -USR2 $MAINPID
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    
    systemctl enable php-fpm
    

    使用 systemctl 管理 php-fpm

    #启动 php-fpm
    systemctl start php-fpm
    
    #停止 php-fpm
    systemctl stop php-fpm
    
    #重载配置文件
    systemctl reload php-fpm
    
    #重启 php-fpm
    systemctl restart php-fpm
    
    
    #查看自启动情况
    systemctl list-unit-files | grep php-fpm
    
    #查看 php-fpm启动状态
    systemctl status php-fpm
    

    php-fpm 检测配置文件

    创建软链接
    ln -s /usr/local/php/sbin/php-fpm /usr/local/sbin/php-fpm
    
    
    检测配置文件
    php-fpm -t
    
    或者
    /usr/local/php/sbin/php-fpm -t