• Centos 下安装 PHP (新)


    今天重新实践了下 CentOS 7.6 下安装 PHP7 并完成配置,总结了一条可以照其实现的套路。

    安装 PHP 所需扩展

    # yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel
    

    获取 PHP 源码包

    采用源码编译的方式安装 PHP,好处是可以获取最新版本,也能提供一定的配置灵活性,适合有经验的。获取方式可以在 Centos 中运行 Wget ,也可以在其他环境下下载 tar 包然后上传到服务器上。推荐后者,速度更快,此处假设已经获取到了 php-7.4.0.tar.gz,并存放到了 /home/downloads

    # cd /home/downloads
    # wget  https://www.php.net/distributions/php-7.4.0.tar.gz
    

    解压

    因与安装实际目录无关,解压到当前目录即可,解压后接入目录等待执行下面操作

    # tar -xvf php-7.4.0.tar.gz
    # cd php-7.4.0
    

    进行配置

    对安装进行预配置,设置一些编译参数。最简单的配置是不带任何参数

    # ./configure
    

    但通常因为可能要自定义 PHP 安装目录、配置文件目录等,可以使用个人习惯的基础配置语句:设定PHP安装目录为 /usr/local/php,配置文件目录为 /usr/local/php/etc,并允许使用 php-fpm 管理 PHP 请求

    # ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --enable-fpm
    

    检查输入无误后即可运行,通常很快完成

    Make

    使用 Make 命令进行编译,时间约 5-10min,可能遇到坑。比如在华为 Centos 7.6 上安装时就遇到了 sqlite3 缺失无法完成的错误提示,百度一下,将 sqlite3 安装上再重新运行 Make 命令

    # make
    

    make install

    如 make 无误,make install 很快。

    # make install
    
    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20190902/
    Installing PHP CLI binary:        /usr/local/php/bin/
    Installing PHP CLI man page:      /usr/local/php/php/man/man1/
    Installing PHP FPM binary:        /usr/local/php/sbin/
    Installing PHP FPM defconfig:     /usr/local/php/etc/
    Installing PHP FPM man page:      /usr/local/php/php/man/man8/
    Installing PHP FPM status page:   /usr/local/php/php/php/fpm/
    Installing phpdbg binary:         /usr/local/php/bin/
    Installing phpdbg man page:       /usr/local/php/php/man/man1/
    Installing PHP CGI binary:        /usr/local/php/bin/
    Installing PHP CGI man page:      /usr/local/php/php/man/man1/
    Installing build environment:     /usr/local/php/lib/php/build/
    Installing header files:          /usr/local/php/include/php/
    Installing helper programs:       /usr/local/php/bin/
    Installing man pages:             /usr/local/php/php/man/man1/
    

    此时 PHP 安装完毕,接下来就要进行相关配置

    设置全局变量

    刚才在 配置 一节中,设置 PHP 目录在 /usr/local/php,因此该目录下就有了 bin 目录,将 /usr/local/php/bin 添加到全局变量 $PATH 中

    编辑文件
    # vi /etc/profile
    
    将下面两句添加到文件尾并保存
    PATH=$PATH:/usr/local/php/bin
    export PATH
    
    刷新生效
    # source /etc/profile
    
    查看是否生效
    # php -v
    
    参考显示结果
    # PHP 7.4.0 (cli) (built: Dec 17 2019 14:44:39) ( NTS )
    # Copyright (c) The PHP Group
    # Zend Engine v3.4.0, Copyright (c) Zend Technologies
    

    配置 PHP 环境

    根据配置时自定义的路径,将有关 PHP 运行的配置文件、启动方式等进行设置,逐一运行下列命令

    进入PHP源码解压缩目录
    # cd /home/downloads/php-7.4.0
    
    将源码中准备好的配置文件复制到指定目录并改名作为 php 运行时的配置文件,在 ./configure 时指定了配置文件目录是 --with-config-file-path=/usr/local/php/etc
    # cp php.ini-production /usr/local/php/etc/php.ini
    
    php-fpm.conf 是 php-fpm 运行时配置文件,里边记录了 include 路径,可以将多个配置文件放到 include 路径下
    # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
    
    www.conf 是默认的有关 www 应用的配置
    # cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
    
    复制 php-fpm 程序到 /etc/init.d,启动、重启或停止 /etc/init.d/php-fpm 即可实现对 PHP 的控制
    # cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    
    赋予 /etc/init.d/php-fpm 执行权限
    # chmod +x /etc/init.d/php-fpm
    

    上述命令完成后,在不考虑与 Nginx 的配合情况下,PHP 实际已经可以独立工作了,可以启动 php-fpm 并查看相关信息

    # /etc/init.d/php-fpm start[/restart/stop]
    
    输出
    # Starting php-fpm done
    

    查看 php-fpm 运行情况

    # ps -ef|grep php
    
    输出
    # root     24080     1  0 09:49 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
    # nobody   24081 24080  0 09:49 ?        00:00:00 php-fpm: pool www
    # nobody   24082 24080  0 09:49 ?        00:00:00 php-fpm: pool www
    # root     24096 23960  0 09:52 pts/0    00:00:00 grep --color=auto php
    
    查看 PHP 配置相关
    # php -i |grep Config
    
    输出
    # Configure Command =>  './configure'  '--prefix=/usr/local/php' '--with-config-file-path=/usr/local/php/etc' '--enable-fpm'
    # Configuration File (php.ini) Path => /usr/local/php/etc
    # Loaded Configuration File => /usr/local/php/etc/php.ini
    # Configuration
    

    上例中 master process 因为是使用 root 账户启动并运行 php-fpm ,因此显示 root 账户,nobody 是因为默认 www.conf 配置文件中 user 和 group 默认值就是 nobody 用户

    与 Nginx 的配合

    假设现在有站点 a.com,路径是 /home/wwwroot/a.com,为方便区别管理,在 /usr/local/php/etc/php-fpm.d 下新增关于 a.com 的配置文件 a.com.conf并假设该文件已创建完毕

    通过复制 www.conf 创建 a.com.conf
    # cp www.conf a.com.conf
    
    编辑目标文件
    # vi a.com.conf
    
    修改 user 和 group 的账号,修改为与 nginx 一致
    user = nginx
    group = nginx
    
    修改监听端口号,即监听 9001 端口,Nginx要将a.com 的请求发到这个端口来(Nginx中设置)
    listen = 127.0.0.1:9001
    

    修改 Nginx 配置文件,新增 server 站点,并在 location 中处理 a.com 的 php 转发

    server {
        listen  80;
        server_name  a.com;
    
        location ~* .php$ {
            root  /home/wwwroot/a.com/;
            fastcgi_pass    127.0.0.1:9001;
            fastcgi_index   index.php;
            fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include         fastcgi_params;
        }
    }
    

    注意上面 server 节中,有关 .php 的请求被转发去了 127.0.0.1:9001,即 a.com.conf 的设定中,这样两边就配合起来了。以此为例,增加新站点 b.com 时,可以再新建 b.com.conf,并设定 php 监听端口号是 9002,Nginx 配置中新增 server 转发到 127.0.0.1:9002,实现同一主机上多个站点的管理。

    • 有关用户名和组:yum 安装 Nginx 后,系统内增加了 nginx 用户和组,因此 Nginx 使用该用户名和组运行没有问题,在 PHP 的 www.conf 配置中,默认用户名和组是 nobody,权限较少,可以修改与 Nginx 一致,即都改成 nginx。
    • 有关系统目录权限:注意网站数据所存放的根目录和父目录的访问权限,本次就遇到了将 wwwroot 根目录放到 /root 下并不合适,可以放到 /home 下。
    • nginx.conf 配置中有关 PHP 的location内,要设置 root 或其它指定目录的方式,本次就遇到了忘记设置 root,结果同一目录下 html 均能访问,.php 文件始终返回"File Not Found"的问题

    参考资料

  • 相关阅读:
    CentOS7 yum方式安装MariaDB 10.2.13-1
    追踪go语言(golang)的新版本新特性【摘抄】
    基于Jersey使用Session
    Netbeans 8.1 检测不到Tomcat8.5.3以上版本已经启动的Bug
    CentOS6上实现Tomcat8 service启动,并查看status
    【转帖】oracle数据类型和对应的java类型
    css文件的MIME错误引发的Jquery Mobile绘制错误
    Elasticsearch index fields 重命名
    oozie调度sqoop Job 数据库密码无法保存
    Java——安全地停止线程
  • 原文地址:https://www.cnblogs.com/cinlap/p/12059232.html
Copyright © 2020-2023  润新知