• centos7.4下安装配置PHP服务(源码安装)并配置nginx支持php


    一、检查php是否已经安装,使用php -v,是否能够看到版本号,或者使用rpm -qa | grep php查看是否安装过。

            # yum remove php* -y

    二、依赖包安装
    1. Linux软件编译安装都需要依赖两个安装包 gcc gcc-c++ make 可使用yum在线安装
    2. # yum -y install gcc gcc-c++  make    
    3. 准备php安装前的前置软件,用yum install xxxx即可安装,当然不嫌麻烦也可以自己编译安装,这里就不详细说了。

      1)zlib以及zlib-devel  zlib提供数据压缩的函数库,也是nginx的前置软件,由于zlib需要编译php的zlib扩展,而编译中会需要使用zlib.h这个头文件,头文件在zlib-devel中,因此也需要下载zlib-devel。

      2)libxml2以及libxml-devel libxml2是一个c语言的xml程序库,可以简单的对xml进行各种操作,并且支持xpath查询,以及部分支持xslt转换等功能。

      3)libxslt以及libxslt-devel 如果不安装libxslt-devel会提示找不到xslt.config文件,xslt是转换xml到其他格式的扩展。

      4)openssl以及openssl-devel 安全套接字层密码库

      5)jpeg IJG的jpeg库,php的gd库所需。

      6)libpng 是c语言写的比较底层的读写png文件的跨平台的库,可以帮助轻松的读写png文件的每一行像素,php的gd库所需。

      7)freetype以及freetype-devel 免费开源的且可移植的字体引擎,提供统一的接口访问多种字体格式,这两个都是gd库的依赖软件,所以如果没有安装,或者版本太低,在安装php时设定的是安装gd库则会报错,另外不安装-devel也是会报错的,因为编译扩展的时候会缺少ft2build.h文件,报错如下图。

      8)gd gd是php处理图形的扩展库

      9)curl,由于我的yum里的版本太低了,所以直接自己编译安装的,安装方式很简单,也就是wget curl下载地址后tar解压,新建/usr/local/curl文件夹,然后进入curl解压后的文件夹里配置./configure --prefix=/usr/local/curl即可,最后make以及make install就安装好了。

      注意:xxx-devel是xxx软件的开发包,包含头文件以及静态库甚至源码。

    4. 下面是部分依赖包源码下载地址,这里图省事,全都yum在线安装
    5. 安装yasm
      http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
      # cd yasm-1.3.0
      # ./configure
      # make&& make install
    6. 安装libmcrypt
      https://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz/download
      # cd libmcrypt-2.5.8
      # ./configure
      # make&& make install
    7. 安装tiff
      下载地址: http://download.osgeo.org/libtiff/tiff-4.0.9.tar.gz
      # cd tiff-4.0.9
      #./configure --prefix=/usr/local/tiff --enable-shared
      # make
      # make install
    8. 安装libpng
      https://nchc.dl.sourceforge.net/project/libpng/libpng16/1.6.35/libpng-1.6.35.tar.gz
      # cd libpng-1.6.35
      #./configure --prefix=/usr/local/libpng --enable-shared
      # make&& make install
    9.  安装freetype
      http://ring.u-toyama.ac.jp/archives/graphics/freetype/freetype2/freetype-2.7.1.tar.gz
      # cd freetype-2.7.1
      #./configure --prefix=/usr/local/freetype --enable-shared
      # make&& make install
    10. 安装jpeg
      http://www.ijg.org/files/jpegsrc.v9a.tar.gz
      # cd jpeg-9a
      #./configure --prefix=/usr/local/jpeg --enable-shared
      # make&& make install
    11. 安装libgd
      https://github-production-release-asset-2e65be.s3.amazonaws.com/29669711/cb5172f2-8d93-11e7-9615-92822f694ebf?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20181003%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20181003T090125Z&X-Amz-Expires=300&X-Amz-Signature=0d2408ac593ecefea66b1ed8435a5cb05ec0743c2bd1369c0c3b88faf8e9fa2d&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dlibgd-2.2.5.tar.gz&response-content-type=application%2Foctet-stream
      # cd libgd-2.2.5
      #./configure --prefix=/usr/local/libgd --enable-shared --with-jpeg=/usr/local/jpeg --with-png=/usr/local/libpng --with-freetype=/usr/local/freetype --with-fontconfig=/usr/local/freetype --with-xpm=/usr/ --with-tiff=/usr/local/tiff --with-webp=/usr/local/libwebp/
      # make&& make install
    12. 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 
    13. 为了安全保险的给make出来,先更新依赖库以防万一:

      yum -y install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel  pcre-devel

      # yum -y install php-mbstring (自行选择安装) 
    三、下载PHP安装包
    1. 首先打开php官网http://php.net/点击导航栏的Downloads进入下载页面:http://php.net/downloads.php,选择合适的版本并选择对应国家镜像进行下载wget http://php.net/get/php-7.2.10.tar.gz/from/a/mirror,我下载的是php-7.2.10.tar.gz
    2. tar -zxvf php-7.2.10.tar.gz
    3. cd php-7.2.10
    4. 新建待会要安装php的文件夹:mkdir /usr/local/php
    5. 创建用户useradd -s /sbin/nologin php
    6. 编译安装,实际上这里的配置项比上述还多,可以使用 ./configure --help 命令查看所有选项,以上这些选项在正常的php开发中完全够用了,后期如果需要,可以选择手动开启相应的模块
    7. 注意:编译的配置项是根据前面源码安装的依赖包的安装路径配置的路径,如果改为yum安装的依赖包,则无须写路径
    8. 嫌麻烦的可以从这一步起参考PHP官方安装说明:http://php.net/manual/zh/install.unix.nginx.php
    9. 编译   ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mcrypt=/usr/include --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache  --enable-gd-native-ttf[php7.2版本无须此选项]
    10. make-j2 && make install                      
    四、配置PHP环境变量  
    在Linux CentOS系统上 安装完PHP和Nginx后,一般需要执行查看版本命令’php -v’和’nginx -v’,确认是否安装成功,如果在没有添加到环境变量之前,执行“php -v”命令查看当前php版本信息时,则会提示命令不存在的错误。不配置环境变量的前提下执行php命令需直接转到php的安装目录bin下,执行’./php -v’即可。
    [root@Anwar01 bin]# ./php -v
    PHP 7.2.10 (cli) (built: Sep 30 2018 17:18:20) ( NTS )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies

    直接转到到nginx的安装目录sbin下,执行’./nginx -v’即可

    # cd /usr/local/nginx/sbin/

    # ./nginx -v

    [root@Anwar01 sbin]# ./nginx -v
    nginx version: nginx/1.15.4

     1、在profile文件末尾添加环境变量路径,即可对所有系统用户生效

    1. # vi /etc/profile
    2. export PATH=$PATH:/usr/local/php/bin
    3. 执行命令source /etc/profile修改生效
    4. 通过echo $PATH命令查看是否添加成功    

    5. 环境变量配置成功后,便可在任意目录下执行php命令或者nginx命令了(注意下面的分号要在双引号内部,否则会报错)     

    6.  export PATH=$PATH:/usr/local/nginx/sbin
    7. $ php -r “echo ‘hello’;”        

    五、它项配置,启动配置

    1. 设置php.ini,使用: vim /usr/local/php/lib/php.ini 打开php配置文件找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0
    2. 设置完毕保存并退出
    3. 另外注意一个地方就是php.ini配置文件的位置可以在编译前配置参数中设置,编译参数可以写成:--with-config-file-path=/usr/local/php 这样的话php就回去指定的目录下读取php.ini配置文件,如果不加这个参数默认位置就是php安装目录下的lib目录,具体也可以在phpinfo()输出界面查看,如果php.ini放到其他位置,php读取不到,那么所有的配置修改后都是不生效的,这点要注意

    配置php-fpm

    cd /usr/local/src/php-7.2.10    

    cp ./php.ini-production /usr/local/php/etc/php.ini    //复制php配置文件到安装目录

    rm -rf /etc/php.ini          //删除系统自带配置文件

    ln -s  /usr/local/php/etc/php.ini /etc/php.ini         //添加软链接到 /etc目录

    # ls -l  /etc/php.ini

    lrwxrwxrwx. 1 root root 26 10月  6 13:17 /etc/php.ini -> /usr/local/php/etc/php.ini

    cd /usr/local/php/etc

    cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf       //复制模板文件为php-fpm配置

    cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf 

    ln -s /usr/local/php/etc/php-fpm.conf  /etc/php-fpm.conf       //添加软件链接到 /etc目录

    /usr/local/php/sbin/php-fpm           //启动php-fpm

    编辑php配置文件

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

    pid = run/php-fpm.pid     //如果这个选项在配置文件存在就取消掉注释使用,如果不存在可以忽略,请勿手动添加,否则PHP启动会报错。

    user = www

    group = www

    :wq! #保存并退出

    cp etc/php-fpm.d/www.conf.default  etc/php-fpm.d/www.conf

     # cp /usr/local/src/php-7.2.10/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm    //添加php-fpm脚本到启动项

    # ls -l /etc/init.d/php-fpm    

    # chmod 755 /etc/init.d/php-fpm    chmod +x /etc/init.d/php-fpm   //赋予php-fpm执行权限

    # ls -l /etc/init.d/php-fpm

      -rwxr-xr-x. 1 root root 2405 10月  6 13:21 /etc/init.d/php-fpm

    设置php-fpm开机启动

    # chkconfig php-fpm on

    # chkconfig --list php-fpm

    php-fpm 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    /etc/init.d/php-fpm start
    service php-fpm start

    六、配置nginx支持php
    1. LNMP环境中的nginx是不支持php的,需要通过fastcgi插件来处理有关php的请求。而php需要php-fpm这个组件提供该功能。在php5.3.3以前的版本php-fpm是以一个补丁包的形式存在的,而php5.3.3以后只需在编译安装时使用–enable-fpm加载该模块即可,无需另行安装。
    2. 检查www用户和www用户组是否存在,不存在请手动创建
      # cat /etc/passwd | grep www
      # cat /etc/group | grep www
      # vim /usr/local/nginx/conf/nginx.conf
      user www www;
      #首行user去掉注释,修改Nginx运行组为www www;必须与/usr/local/php/etc/php-fpm.d/www.conf中的user,group配置相同,否则php运行出错
      location / {
      root html;
      index index.html index.htm index.php;      //添加index.php
      }
      location ~ .php$ {
      root html;
      fastcgi_pass 127.0.0.1:9000;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
      }
      #取消FastCGI server部分location的注释,注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径
      :wq! #保存并退出
      启动nginx服务
      # /etc/init.d/nginx restart
      #启动php服务
      # /etc/init.d/php-fpm start
      测试php配置
      进入nginx默认网站根目录
      # cd /usr/local/nginx/html/
      # ls
      50x.html index.html
      删除默认测试页
      # rm -rf /usr/local/nginx/html/*
    3. # pwd
      /usr/local/nginx/html
      新建index.php文件进行测试
      # vim index.php
      <?php
      phpinfo();
      ?>
      :wq! #保存并退出
      设置目录所有者为 www
      # chown www.www /usr/local/nginx/html/ -R
      设置目录权限
      # chmod 755 /usr/local/nginx/html/ -R
      打开浏览器输入服务器IP地址,会看到下面的界面就是php安装成功
    4. PHP Version 7.2.10

      System Linux Anwar02 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
      Build Date Oct 8 2018 16:46:22
      Configure Command './configure' '--prefix=/usr/local/php' '--with-config-file-path=/usr/local/php/etc' '--with-mcrypt=/usr/include' '--with-mysql=mysqlnd' '--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-gd' '--with-iconv' '--with-zlib' '--enable-xml' '--enable-bcmath' '--enable-shmop' '--enable-sysvsem' '--enable-inline-optimization' '--enable-mbregex' '--enable-fpm' '--enable-mbstring' '--enable-ftp' '--enable-gd-native-ttf' '--with-openssl' '--enable-pcntl' '--enable-sockets' '--with-xmlrpc' '--enable-zip' '--enable-soap' '--without-pear' '--with-gettext' '--enable-session' '--with-curl' '--with-jpeg-dir' '--with-freetype-dir' '--enable-opcache'
      Server API FPM/FastCGI
      Virtual Directory Support disabled
      Configuration File (php.ini) Path /usr/local/php/etc
      Loaded Configuration File /usr/local/php/etc/php.ini
     可能有的错误的原因是没有创建www这个用户,应该在服务器系统中添加www用户组和用户www,如下命令:
    #/usr/sbin/groupadd -f www
    #/usr/sbin/useradd -g www www
     
    七、优化配置
    1. 编辑php配置文件php.ini
    2. # vim /usr/local/php/etc/php.ini
    3. 找到:disable_functions =       修改成disable_functions=passthru, exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status, ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink, symlink,popepassthru,stream_socket_server, escapeshellcmd, dll, popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname, getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd,posix_getegid, posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid,posix_getpgrp,posix_getpid,posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit,posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid, posix_setuid,  posix_strerror,posix_times,posix_ttyname,posix_uname     //一些需要禁用的PHP危险函数,提高PHP主机安全性(disable_functions)
    4. 找到:date.timezone =   修改为:date.timezone = PRC              //设置时区
    5. 找到:expose_php = On     修改为:expose_php = Off             //禁止显示php版本的信息
    6. 找到:short_open_tag = Off    修改为:short_open_tag = On                   //支持php短标签
    7. 找到opcache.enable=0   修改为opcache.enable=1                          //php支持opcode缓存
    8. 找到:opcache.enable_cli=1    修改为:opcache.enable_cli=0                         //php支持opcode缓存
    9. 在最后一行添加:zend_extension=opcache.so                          //开启opcode缓存功能 (在文本按Shift+G就能跳到最后一行)
    10. :wq! #保存并退出
    关于作者:博主思想敏锐,涉猎甚广,英语学士,法律硕士,熟悉c,web,js,java, php,目前主要从事linux服务器运维及计算机硬件维护。
  • 相关阅读:
    缓冲字符流 java.io.BufferedWriter ,java.io.BufferedReader,缓冲字符输出流:PrintWriter
    转换流读写操作 java.io.OutputStreamWriter ,java.io.InputStreamReader
    对象流,它们是一对高级流,负责即将java对象与字节之间在读写的过程中进行转换。 * java.io.ObjectOutputStream * java.io.ObjectInputStream
    flush() 缓冲输出流的缓冲区问题
    使用文件流与使用缓冲流完成文件的复制操作性能对比,文件流 FileInputStream FileOutputStream 缓冲流: BufferedInputStream BufferedOutputStream
    RandomAccessFile()实现用户注册功能, 新增,查询,更新
    RandomAccessFile实现简易记事本工具操作
    对比两种方式复制文件的效率
    File 删除给定的文件或目录
    RandomAccessFile(),读写文件数据的API,以及复制文件操作
  • 原文地址:https://www.cnblogs.com/Anwar/p/9744576.html
Copyright © 2020-2023  润新知