zoukankan      html  css  js  c++  java
  • 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服务器运维及计算机硬件维护。
  • 相关阅读:
    函数
    python操作文件
    POJ-2689-Prime Distance(素数区间筛法)
    POJ-2891-Strange Way to Express Integers(线性同余方程组)
    POJ-2142-The Balance
    POJ-1061-青蛙的约会(扩展欧几里得)
    Educational Codeforces Round 75 (Rated for Div. 2) D. Salary Changing
    Educational Codeforces Round 75 (Rated for Div. 2) C. Minimize The Integer
    Educational Codeforces Round 75 (Rated for Div. 2) B. Binary Palindromes
    Educational Codeforces Round 75 (Rated for Div. 2) A. Broken Keyboard
  • 原文地址:https://www.cnblogs.com/Anwar/p/9744576.html
Copyright © 2011-2022 走看看