PHP之环境搭建(php7.4 + php8.1)

之前写过几次,使用lnmp,宝塔,源码编译等方式来进行PHP环境的搭建, 随着接触的越来越多, 这里做一个总结, 常用的搭建方式

 

1.编译安装

之前写个几次,可以参考之前的

 

这次记录下多个版本PHP的安装 (php7.4 + php8.1)

1)安装php7.4

安装编译环境

yum -y install gcc gcc-c++ autoconf automake build-essential zlib zlib-devel openssl openssl-devel pcre pcre-devel

 

a)下载并解压

cd /usr/local/src/
wget https://www.php.net/distributions/php-7.4.32.tar.gz

tar -zxvf php-7.4.32.tar.gz 

b)编译并安装

cd php-7.4.32/

./configure --prefix=/usr/local/php74 --with-mysql --with-mysqli --with-pdo_mysql --with-iconv-dir --with-zlib --with-libxml-dir --enable-xml --with-curl --enable-fpm --enable-mbstring --with-gd --with-openssl --with-mhash --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-bcmath
make && make install -j 4

c)添加全局变量

vim /etc/bashrc

alias php7=/usr/local/php74/bin/php
alias phpfpm7=/usr/local/php74/sbin/php-fpm

# 生效
source /etc/bashrc

d)查看加载的配置文件,并设置

php7 -i|grep php.ini

cp /usr/local/src/php-7.4.32/php.ini-development /usr/local/php74/lib/php.ini

e)添加nginx配置

server {
  listen      8041;
  server_name 127.0.0.1;
  root        /data/www/lx; 
  access_log  /data/log/nginx/8041_access.log main;
  error_log   /data/log/nginx/8041_error.log warn;

  location / {
    #try_files $uri $uri/ /index.php?$query_string;
    index index.html index.htm;
  }

  #location ~ .*\.(php|php5)?$ {
  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;
  }

}

f)扩展安装

1.进入源码包gd库目录
cd /usr/local/download/php-7.4.11/ext/gd  #这里是我的目录,需要改成你自己的目录

2.生成configure
/usr/local/php/bin/phpize  
#这里是我的目录,需要改成你自己的目录

3)编译
./configure --with-php-config=/usr/local/php/bin/php-config --with-jpeg-dir=/usr/local/jpeg/

4)安装
make&&make install

5)添加配置php.ini
extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/gd.so




查看安装的扩展文件:
/usr/local/php/include/php/ext

g)设置开机启动

vim /etc/rc.d/rc.local
添加:
/usr/local/php/sbin/php-fpm

 

 

 

常见问题:

1.FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream, client: 127.0.0.1, server: 127.0.0.1, request: "GET /index.php HTTP/1.1", upstream: "fastcgi://127.0.0.1:9000", host: "127.0.0.1"

原因: 默认PHP配置中的fastcgi_param配置fastcgi_param配置,这个地方默认的是/Scripts$fastcgi_script_name

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

2.权限不足情况, 修改PHP的进程使用的用户

groupadd www

useradd -g www -s /sbin/nologin www

vim /usr/local/php74/etc/php-fpm.d/www.conf
user = www
group = www

 

 2)安装PHP8.1

 安装依赖

yum -y install wget vim pcre pcre-devel openssl openssl-devel libicu-devel gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses ncurses-devel curl curl-devel krb5-devel libidn libidn-devel openldap openldap-devel nss_ldap jemalloc-devel cmake boost-devel bison automake libevent libevent-devel gd gd-devel libtool* libmcrypt libmcrypt-devel mcrypt mhash libxslt libxslt-devel readline readline-devel gmp gmp-devel libcurl libcurl-devel openjpeg-devel sqlite-devel

 

 

wget https://www.php.net/distributions/php-8.1.11.tar.gz
tar -zxvf php-8.1.11.tar.gz 

cd php-8.1.11/
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php --enable-mbstring  --enable-ftp  --enable-gd   --enable-gd-jis-conv --enable-mysqlnd --enable-pdo   --enable-sockets   --enable-fpm   --enable-xml  --enable-soap  --enable-pcntl   --enable-cli   --with-openssl  --with-mysqli=mysqlnd   --with-pdo-mysql=mysqlnd   --enable-mysqlnd-compression-support --with-pear   --with-zlib  --with-iconv  --with-curl   --enable-bcmath

make && make install -j 4


source /etc/bashrc
alias php=/usr/local/php/bin/php
alias phpfpm=/usr/local/php/sbin/php-fpm


php -i|grep php.ini

cp /usr/local/src/php-8.1.11/php.ini-production php.ini   生产环境
or
cp /usr/local/src/php-8.1.11/php.ini-development php.ini 开发环境 cp php
-fpm.conf.default php-fpm.conf cp php-fpm.d/www.conf.default php-fpm.d/www.conf

#Linux创建相关用户
groupadd www
useradd -g www www

groupadd nginx
useradd -g nginx nginx
# 使用Unix的方式链接 修改配置文件 www.conf listen
= /var/run/php-fpm/php7-fpm.sock user www ; group www; listen.owner = nginx listen.group = nginx listen.mode = 0660
# nginx location ~ \.php$ { #fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php-fpm/php7-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }


注: php-fpm服务启动使用www用户, Nginx服务启动使用Nginx服务


# 添加启动文件
  1. cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
  2.  chmod +x /etc/init.d/php-fpm

# 添加权限, 指定配置文件

vim /etc/init.d/php-fpm

php_fpm_INI=${prefix}/etc/php.ini

php_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID -c $php_fpm_INI -R"

 

# 将user group 改成 root


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

user = root
group = root


# 重新加载和重启php-fpm服务

systemctl daemon-reload

systemctl restart php-fpm



 

php-pm 相关配置项修改

/usr/local/php/etc/php-fpm.conf



配置错误日志:
error_log = /usr/local/php/var/php-fpm.log
配置pid文件:    
pid = /usr/local/php/var/run/php-fpm.pid

 

 

 

 

 

 更多操作

 

PHP5.33.之前
/usr/local/php/sbin/php-fpm{start|stop|quit|restart|reload|logrotate}

--start 启动php的fastcgi进程

--stop 强制终止php的fastcgi进程

--quit 平滑终止php的fastcgi进程

--restart 重启php的fastcgi进程

--reload 重新平滑加载php的php.ini

--logrotate 重新启用log文件


而新版本的操作变化了,因为直接操作进程就可以了。下面来看下指令:

kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`

INT, TERM 立刻终止

QUIT 平滑终止

USR1 重新打开日志文件

USR2 平滑重载所有worker进程并重新载入配置和二进制模块

 

 

 

 

 

参考:

 

 

 

2.宝塔

一键傻瓜式安装, 提供可视化界面,方便操作与维护

 

3.lnmp

一键安装包方式安装

 

4.OneinStack (https://oneinstack.com/)

 

 

自动安装

工具目录: ~/oneinstack

 

1)重置MySQL密码reset_db_root_password.sh执行密码修改

 

 

5.docker

 

posted @ 2022-09-16 15:09  X-Wolf  阅读(1315)  评论(0编辑  收藏  举报