Press "Enter" to skip to content

Centos 7源码编译安装 php7.2 之生产篇

介绍:

久闻php7的速度以及性能那可是比php5系列的任何一版本都要快,具体性能有多好,建议还是先尝试下再说。如果你是升级或新安装,那你首先需要考虑php7和程序是否存在兼容性,如果程序是基于php5开发的,那么就需要考虑php7是否适合你当前的生产环境,今天我就实操并安装用于生产中。

先安装php依赖包,否则在编译安装php7的过程当中会出现各种报错,安装完成后即可进入下一个环节。

安装扩展包并更新系统内核:

$ yum install epel-release -y
$ yum update

安装php依赖组件(包含Nginx依赖):

$ 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

创建用户和组,并下载php安装包解压:

$ cd /tmp
$ groupadd www
$ useradd -g www www
$ wget http://am1.php.net/distributions/php-7.2.1.tar.gz
$ tar xvf php-7.2.1.tar.gz
$ cd php-7.2.1

设置变量并开始源码编译:

$ cp -frp /usr/lib64/libldap* /usr/lib/
$ ./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--enable-mysqlnd-compression-support \
--with-iconv-dir \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib \
--with-libxml-dir \
--enable-xml \
--disable-rpath \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--with-curl \
--enable-mbregex \
--enable-mbstring \
--enable-intl \
--with-mcrypt \
--with-libmbfl \
--enable-ftp \
--with-gd \
--enable-gd-jis-conv \
--enable-gd-native-ttf \
--with-openssl \
--with-mhash \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--with-gettext \
--disable-fileinfo \
--enable-opcache \
--with-pear \
--enable-maintainer-zts \
--with-ldap=shared \
--without-gdbm \

若无报错执行下一步安装,如果编译过程中出现错误,根据报错安装依赖包,通常不会出现这种问题。

注意:–enable-gd-jis-conv  此参数会导致Zabbix中文字符乱码,建议取消。

开始安装:

$ make -j 4 && make install

完成安装后配置php.ini文件:

$ cp php.ini-development /usr/local/php/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.ini 相关参数:

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

expose_php = Off
short_open_tag = ON
max_execution_time = 300
max_input_time = 300
memory_limit = 128M
post_max_size = 32M
date.timezone = Asia/Shanghai
mbstring.func_overload=2
extension = "/usr/local/php/lib/php/extensions/no-debug-zts-20160303/ldap.so"

设置 OPcache 缓存:

[opcache]
zend_extension=/usr/local/php/lib/php/extensions/no-debug-zts-20160303/opcache.so
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=60
opcache.fast_shutdown=1
opcache.enable_cli=1

设置php安全函数:

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

默认值:

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

或通配:

disable_functions = passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru

配置www.conf

取消以下注释并修改优化其参数:

listen = /var/run/www/php-cgi.sock
listen.owner = www
listen.group = www
listen.mode = 0660
listen.allowed_clients = 127.0.0.1
pm = dynamic
listen.backlog = -1
pm.max_children = 180
pm.start_servers = 50
pm.min_spare_servers = 50
pm.max_spare_servers = 180
request_terminate_timeout = 120
request_slowlog_timeout = 50
slowlog = var/log/slow.log

创建php-cgi.sock存放目录

$ mkdir /var/run/www/
$ chown -R www:www /var/run/www

配置php-fpm.conf

取下以下注释并填写完整路径:

pid = /usr/local/php/var/run/php-fpm.pid

至此php7已经安装完成。

说明:禁用php函数,如果程序需要这些函数,可以取消禁止,新手建议忽略此步骤。

创建system系统单元文件php-fpm启动脚本:

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

添加如下变量内容:

[Unit]
Description=The PHP FastCGI Process Manager
After=syslog.target network.target

[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

启动php-fpm服务并加入开机自启动:

$ systemctl enable php-fpm.service
$ systemctl restart php-fpm.service

PHP整个安装过程已经完成。如果你是按照本文安装未成功的,希望你能留言说明错误原因,我将无偿协助你配置。

如果你有好的建议完善该文章,非常欢迎你提出和改进,我们一起共同学习和进步。

版权声明:本站原创文章,欢迎任何形式的转载。
转载请注明:Centos 7源码编译安装 php7.2 之生产篇 | 任我乐

33 Comments

  1. PeopleSea PeopleSea 2018年4月3日

    请问和nginx用不了怎么整…
    nginx.conf
    server {
    listen 80;
    server_name localhost;
    root /localhost;
    #charset koi8-r;

    #access_log logs/host.access.log main;

    location / {
    index index.php index.html index.htm;
    }

    #error_page 404 /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    # proxy_pass http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
    fastcgi_pass unix:/var/run/www/php-cgi.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }

    # deny access to .htaccess files, if Apache’s document root
    # concurs with nginx’s one
    #
    #location ~ /\.ht {
    # deny all;
    #}
    }

    • Node Cloud Node Cloud 2018年4月5日

      有报错日志吗

  2. 小蜗牛 小蜗牛 2018年3月23日

    你好 博主 我用你的教程安装了PHP-7.2.3之后服务起来了 但是不能用php -v这个命令啊

    • Node Cloud Node Cloud 2018年3月29日

      有日志吗

    • oldna oldna 2018年3月30日

      PHP 命令没添加到环境变量

      可以用下面命令测试
      /usr/local/php/bin/php -v

  3. xphp xphp 2018年3月17日

    设置变量并开始源码编译:
    $ cp -frp /usr/lib64/libldap* /usr/lib/

    确定不是
    $ cp -frp /usr/lib64/libldap* /usr/lib64/


    另外这一句的命令是必须的吗?
    能解释下这一句命令的作用吗,在别处看见的编译安装php7没有这一句命令。

  4. xxxphp xxxphp 2018年3月17日

    设置变量并开始源码编译:
    $ cp -frp /usr/lib64/libldap* /usr/lib/

    确定不是
    $ cp -frp /usr/lib64/libldap* /usr/lib64/

    另外这一句命令是必须的吗?
    在别处看见的编译安装php7没有这一句。
    能解释下这一句命令的作用吗。

  5. xxxphp xxxphp 2018年3月17日

    设置变量并开始源码编译:

    $ cp -frp /usr/lib64/libldap* /usr/lib/

    确定不是
    $ cp -frp /usr/lib64/libldap* /usr/lib64/

    • xxxphp xxxphp 2018年3月17日

      另外这一句命令是必须的吗?
      为什么别处的编译安装php7没有这一句命令

    • xxxphp xxxphp 2018年3月17日

      另外这一句命令是必须的吗?
      在别处看到的编译安装php7没有这一句。

    • xxphp xxphp 2018年3月17日

      这一句命令有什么作用呢?

    • Node Cloud Node Cloud 2018年3月29日

      64位可以用后者

  6. frans frans 2018年3月13日

    编译时有两个模块可以删除了。

    –with-mcrypt \
    –enable-gd-native-ttf \

    • frans frans 2018年3月13日

      我这边的版本是 7.2.3

    • Node Cloud Node Cloud 2018年3月29日

      OK,我会编辑下,谢谢您的建议。

  7. PHPSIX PHPSIX 2018年3月8日

    你好,博主,我根据你的教程安装了好多遍,但是终究没有成功。能麻烦留一下您的联系方式吗? 想请教你一下。我博客上有我的联系方式,麻烦了。

    • Node Cloud Node Cloud 2018年3月9日

      您好,有什么具体的报错吗

      • PHPSIX PHPSIX 2018年3月9日

        报404,查了好多遍没找到什么原因

        • Node Cloud Node Cloud 2018年3月9日

          网站根目录指定的不对吧

          • PHPSIX PHPSIX 2018年3月11日

            对的,具体的nginx配置代码我已经粘上来了,麻烦看一下。

      • PHPSIX PHPSIX 2018年3月9日

        server {
        listen 80;
        server_name localhost;

        #charset koi8-r;
        #access_log /var/log/nginx/host.access.log main;

        location / {
        root /usr/share/nginx/html;
        index index.html index.htm;
        }

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
        root /usr/share/nginx/html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        # proxy_pass http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        # root html;
        # fastcgi_pass 127.0.0.1:9000;
        # fastcgi_index index.php;
        # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
        # include fastcgi_params;
        #}

        location ~ \.php$ {
        try_files $uri =404;
        #root html;
        fastcgi_pass unix:/var/run/www/php-cgi.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }
        # deny access to .htaccess files, if Apache’s document root
        # concurs with nginx’s one
        #
        #location ~ /\.ht {
        # deny all;
        #}
        }

  8. ysl ysl 2018年3月8日

    ; Default Value: 511 (-1 on FreeBSD and OpenBSD)
    listen.backlog = -1
    centos的系统要注意

    • xxxphp xxxphp 2018年3月17日

      centos的系统要注意

      这个是什么意思?

  9. 木木 木木 2018年3月5日

    您好,我想问问关于编译参数–enable-maintainer-zts的问题。这个参数意味着启用线程安全,那么使用CGI/FastCGI模式时需要启用该选项吗?区分在Nginx、Apache、IIS上的配置差异。
    PHP手册中的话:
    What does thread safety mean when downloading PHP?
    Thread Safety means that binary can work in a multithreaded webserver context, such as Apache 2 on Windows. Thread Safety works by creating a local storage copy in each thread, so that the data won’t collide with another thread.

    So what do I choose? If you choose to run PHP as a CGI binary, then you won’t need thread safety, because the binary is invoked at each request. For multithreaded webservers, such as IIS5 and IIS6, you should use the threaded version of PHP.

    也就是说在Nginx上使用时,由于使用的是FastCGI,所以不启用该选项对吧?

    • Node Cloud Node Cloud 2018年3月9日

      不建议使用

  10. lazysheep lazysheep 2018年1月5日

    你好,我安装nginx后发现无法解析php 我该如何调试解决?

    • lazysheep lazysheep 2018年1月6日

      现在502了

    • Node Cloud Node Cloud 2018年1月7日

      请把Nginx解析php配置段发出来看看

  11. 符号 符号 2017年12月26日

    哇哇哇,正是我需要的啊

    • Node Cloud Node Cloud 2017年5月21日

      如果你需要在centos6下进行安装,那么启动脚本需要重写,启动方式也有所不同,例如centos6系列下没有systemctl管理工具,需要使用service

  12. 厉害了 厉害了 2017年5月21日

    不错

  13. 柚子 柚子 2017年5月8日

    堪称经典,收藏了

发表评论

电子邮件地址不会被公开。 必填项已用*标注