编译配置 PHP7 7.0.10, OPCache, Yac,奔向 0.00x 秒 Linux PHP

axiuno 2016-8-26 5490

1. 下载源代码:

wget http://cn2.php.net/get/php-7.0.10.tar.bz2/from/this/mirror

坑爹的是下载下来是一个 mirror 文件,重命名下:

mv mirror php7.tar.bz2

然后解压缩:

tar jxvf php7.tar.bz2

进入目录:

cd php-7.0.10

配置编译参数,:

 ./configure --prefix=/usr/local/php7/ --enable-mbstring --with-curl --with-gd --with-jpeg-dir --with-png-dir --with-config-file-path=/usr/local/php7/etc/ --enable-fpm --enable-mysqlnd --with-pdo-mysql=mysqlnd --enable-fpm --enable-opcache --with-zlib --with-openssl --with-iconv

这里如果需要查找当前 PHP 使用编译的参数,使用:

php -i|grep Confi

然后这里有个坑:Makefile 文件缺少一个 -liconv

vim Makefiles,查找 EXTRA_LIBS,在末尾追加:-liconv,最后看起来这样:

EXTRA_LIBS = -lcrypt -lcrypt -lrt -lpng -lz -lcurl -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lcurl -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -
lxml2 -lz -lm -lcrypt -liconv

然后就是

make
make test
make install

安装完以后,PHP 安装到了 /usr/local/php7,我们切进去:

cd /usr/local/php7

拷贝几个它需要的配置文件: 

cp /usr/local/src/php-7.0.10/php.ini-production etc/php.ini
cp etc/php-fpm.conf.default etc/php-fpm.conf
cp etc/php-fpm.d/www.conf.default etc/php-fpm.d/www.conf

然后编辑下 vim etc/php-fpm.d/www.conf,根据自己的情况调节参数

user = www
group = www
listen = 127.0.0.1:9000
pm.max_children = 32
pm.start_servers = 32
pm.min_spare_servers = 32
pm.max_spare_servers = 32

最后启动 php-fpm:

/usr/local/php7/sbin/php-fpm -D


到这里基本上就完成了PHP7的编译、配置、启动。然后就是与 nginx 的结合,我们通过上面的配置,指定了 127.0.0.1:9000 与 nginx 通信,所以只需要修改下 nginx 的一处就可以完成配置:

vim /usr/local/nginx/conf/nginx.conf ,找到自己的 server

        location ~ \.php$ {
                include fcgi.conf;
                #fastcgi_pass  unix:/tmp/php-cgi.sock;
                fastcgi_pass  127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME /home/wwwroot/bbs.xiuno.com$fastcgi_script_name;
        }

修改 fastcgi_pass 为 PHP-FPM 进程监听的IP地址和端口就可以了。

重启 nginx,生效:

service nginx restart


// ----------------------------> 接着我们开始配置 Opcache + Yac


1. 下载 yac 源代码

wget http://pecl.php.net/get/yac-2.0.1.tgz

2. 解压缩

tar zxvf yac-2.0.1.tgz
cd yac-2.0.1

3. PHP 扩展标准流程:

/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config
make && make install

Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/

4. 查看扩展是否编译成功:

ll /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/
total 2732
-rwxr-xr-x 1 root root 1693884 Sep  5 19:09 opcache.a
-rwxr-xr-x 1 root root  898004 Sep  5 19:09 opcache.so
-rwxr-xr-x 1 root root  197535 Sep  5 19:24 yac.so

5. 配置 php.ini

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

extension_dir = "/usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/"
zend_extension=opcache.so
extension=yac.so

[opcache]
opcache.enable=1 
opcache.enable_cli=1  
opcache.memory_consumption=64
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.file_cache=/dev/shm

[yac]
yac.enable = 1
yac.keys_memory_size = 4M
yac.values_memory_size = 64M
yac.compress_threshold = -1
yac.enable_cli = 0

6. 重启 php-fpm

kill `cat /var/run/php-fpm.pid`
/usr/local/php7/sbin/php-fpm -D


7. 如果内存不足,可能会报错,这时打开交换分区

dd if=/dev/zero of=/home/swap bs=64M count=32
mkswap /home/swap
swapon /home/swap 
make 完毕以后
swapoff /home/swap


8. 编译 openssl

/usr/local/php7/bin/php -m
cd /usr/local/src/php-7.1.13/ext/openssl/
cp config0.m4 config.m4
/usr/local/php7/bin/phpize --with-php-config=/usr/local/php7/bin/php-config 
./configure --with-openssl --with-php-config=/usr/local/php7/bin/php-config 
make
make install
ll /usr/local/php7/lib/php/extensions/no-debug-non-zts-20151012/


最新回复 (17)
  • axiuno 2016-9-6
    0 引用 2

    增加了  opcache  +  yac  的配置。


    yac 需要 

    http://ftp.gnu.org/gnu/autoconf/autoconf-2.64.tar.gz  

    tar zxvf autoconf-2.64.tar.gz 

    cd autoconf-2.64/


    ./configure 

    make

    make install



    比较全的编译参数:

     ./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 --with-iconv-dir=/usr/local/libiconv --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --with-mcrypt --enable-ftp --with-gd --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-xsl


    PHP 7.2 不在支持 --with-mcrypt, --enable-gd-native-ttf

     ./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 --with-iconv-dir=/usr/local/libiconv --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --enable-ftp --with-gd --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-xsl

    最后于 8天前 被axiuno编辑 ,原因:
  • haopu66 2016-9-6
    0 引用 3
    哇好厉害,可是看不懂。。。
  • sunjix5852 2016-9-12
    0 引用 4
    你这个是Linux系统???
  • xxxx 2017-2-13
    0 引用 5
    不错
  • ins 2017-2-13
    0 引用 6
    mark....
  • khorchin 2017-4-11
    0 引用 7
    开启opcache时,打开php.ini,一定要给[opcache]标签下加zend_extension  =  opcache.so        否则opcache不会开启。
  • khorchin 2017-4-12
    0 引用 8
    axiunn opcache.enable=1 不就是开启吗,=0没开启
    然并卵,话不多说,你试试就知道了。
  • 伏笔主机 2017-4-12
    0 引用 9
    也不是所有程序都支持php7
  • PnBank 2017-4-12
    0 引用 10
    Redis    是神器
  • 游客 11月前
    0 引用 11
    Fatal    error:    Uncaught    Error:    Call    to    a    member    function    get()    on    null    in    /data/wwwroot/www.xxx.com/xiunophp/xiunophp.min.php:48    Stack    trace:    #0    /data/wwwroot/www.xxx.com/xiunophp/xiunophp.min.php(50):    cache_yac->get('grouplist')    #1    /data/wwwroot/www.xxx.com/tmp/model_group.func.php(114):    cache_get('grouplist')    #2    /data/wwwroot/www.xxx.com/tmp/index.inc.php(20):    group_list_cache()    #3    /data/wwwroot/www.xxx.com/index.php(50):    include('/data/wwwroot/w...')    #4    {main}    thrown    in    /data/wwwroot/www.xxx.com/xiunophp/xiunophp.min.php    on    line    48

    Fatal    error:    Uncaught    Error:    Call    to    a    member    function    set()    on    null    in    /data/wwwroot/www.xxx.com/xiunophp/xiunophp.min.php:48    Stack    trace:    #0    /data/wwwroot/www.xxx.com/xiunophp/xiunophp.min.php(50):    cache_yac->set('runtime',    NULL,    0)    #1    /data/wwwroot/www.xxx.com/tmp/model_runtime.func.php(66):    cache_set('runtime',    NULL)    #2    [internal    function]:    runtime_save()    #3    {main}    thrown    in    /data/wwwroot/www.xxx.com/xiunophp/xiunophp.min.php    on    line    48
    完全按照站长的步骤做的,
    把'type'        =>        'mysql',
    改成
    'type'        =>        'yac',打开页面就这样
  • pop300p 8月前
    0 引用 12


    果然牛逼!

  • 参观者 8月前
    0 引用 13



    我用的 xcache +redis 


    不过存在大量访问并发和数据读写时,出现大量CPU和内存占用


    相反不启用这些缓存相对来说还好些


    我就在想,开了这些缓存,除了好看,还是我xcache +redis 哪里设置得不对

  • pop300p 8月前
    0 引用 14
    参观者 我用的 xcache +redis 不过存在大量访问并发和数据读写时,出现大量CPU和内存占用相反不启用这些缓存相对来说还好些我就在想,开了这些缓存,除了好看,还是 ...
    请问你是PHP什么版本?
  • 参观者 8月前
    0 引用 15
    pop300p 请问你是PHP什么版本?
    php5.4    mysql  5.5

    都是比较保守的版本
  • mfxer 5月前
    0 引用 16
    还能不能再快点
  • 5月前
    0 引用 17
    mfxer 还能不能再快点
    生成静态页,  0s
  • mfxer 3月前
    0 引用 18
    php7.2,xiuno4b7,opcache+yac  0.003
返回
发新帖
HTTP/1.1 502 Bad Gateway Content-Type: text/html Connection: close Content-Length: 308 Date: Wed, 25 Apr 2018 04:53:02 GMT X-Via: 1.1 localhost.localdomain (random:844266 Fikker/Webcache/3.7.4) 502 Bad Gateway

502 Bad Gateway - Cann't Connect To Upstream Server By SSL Read

Server: localhost.localdomain
Date: 2018-04-25 04:53:02

Fikker/Webcache/3.7.4