关于php:PHP-80-源码编译安装-JIT-尝鲜

34次阅读

共计 4690 个字符,预计需要花费 12 分钟才能阅读完成。

简述

PHP 8.0 Alpha 1 曾经在 2020 年 6 月 25 号公布了,明天给大家分享一篇最简化的 PHP 8 源码编译装置办法,疾速尝鲜 PHP 8.0 的新个性 JIT。这是一个通用性 PHP 源码编译装置办法,其它 PHP 版本编译装置形式相似。

PHP 8.0 源码编译装置 & JIT 尝鲜

操作系统:CentOS Linux release 7.4.1708 (Core)
GCC:4.8.5 20150623 (Red Hat 4.8.5-28)
PHP 版本:php-8.0.0alpha1

1. 下载页面

https://downloads.php.net/~pollita/

2. 下载 PHP 8.0

$ wget https://downloads.php.net/~pollita/php-8.0.0alpha1.tar.gz

3. 解压

$ tar -zxvf php-8.0.0alpha1.tar.gz

4. 新建装置目录

因为本机有多个 PHP 版本并存,须要新建一个富裕意义的目录,一个不假思索就能通晓 PHP 版本的目录名称。

$ mkdir -p /usr/local/php80

4. configure options

这是一个精简版配置选项,更加丰盛的 PHP 配置选项阐明:https://www.php.net/manual/en/configure.about.php

$ cd php-8.0.0alpha1
$ ./configure --prefix=/usr/local/php80/ --enable-debug --enable-fpm 
--with-config-file-path=/usr/local/php80/etc/ --with-config-file-scan-dir=/usr/local/php80/etc/php.d/

若在 configure 过程中,遇到提醒 configure: error,注意看下方的谬误详细信息。以下列出了在配置过程中呈现的谬误状况之要害信息摘要,未列举到的其它谬误状况,解决办法一模一样:

Error #1:

configure: error: Package requirements (libxml-2.0 >= 2.7.6) were not met:

No package 'libxml-2.0' found

解决办法:

yum install libxml2-devel.x86_64

Error #2:

configure: error: Package requirements (sqlite3 > 3.7.4) were not met:

No package 'sqlite3' found

解决办法:

yum install sqlite-devel.x86_64

如果看到以下提示信息,阐明 configure 这步曾经胜利了哟 ^_^。

5. 编译 & 装置

$ make

make 阶段耗费的工夫与机器配置无关哟,若看到以下信息,阐明 make 阶段曾经实现了。

Build complete.
Don't forget to run'make test'.

make test 因为是尝鲜,这步先省略了。

$ make install
exit 0;  -v -d /home/fanjiapeng/php-8.0.0alpha1/Zend/zend_ini_parser.y -o /home/fanjiapeng/php-8.0.0alpha1/Zend/zend_ini_parser.c
Installing shared extensions:     /usr/local/php80/lib/php/extensions/debug-non-zts-20190128/
Installing PHP CLI binary:        /usr/local/php80/bin/
Installing PHP CLI man page:      /usr/local/php80/php/man/man1/
Installing PHP FPM binary:        /usr/local/php80/sbin/
Installing PHP FPM defconfig:     /usr/local/php80/etc/
Installing PHP FPM man page:      /usr/local/php80/php/man/man8/
Installing PHP FPM status page:   /usr/local/php80/php/php/fpm/
Installing phpdbg binary:         /usr/local/php80/bin/
Installing phpdbg man page:       /usr/local/php80/php/man/man1/
Installing PHP CGI binary:        /usr/local/php80/bin/
Installing PHP CGI man page:      /usr/local/php80/php/man/man1/
Installing build environment:     /usr/local/php80/lib/php/build/
Installing header files:          /usr/local/php80/include/php/
Installing helper programs:       /usr/local/php80/bin/
  program: phpize
  program: php-config
Installing man pages:             /usr/local/php80/php/man/man1/
  page: phpize.1
  page: php-config.1
/home/fanjiapeng/php-8.0.0alpha1/build/shtool install -c ext/phar/phar.phar /usr/local/php80/bin/phar.phar
ln -s -f phar.phar /usr/local/php80/bin/phar
Installing PDO headers:           /usr/local/php80/include/php/ext/pdo/

6. 验证 PHP

$ /usr/local/php80/bin/php -v
PHP 8.0.0alpha1 (cli) (built: Jul  2 2020 15:47:26) (NTS DEBUG)
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies

7. 环境配置

$ ln -s /usr/local/php80/bin/php /usr/bin/php80
$ cp php.ini-development /usr/local/php80/etc/php.ini
$ cp /usr/local/php80/etc/php-fpm.conf.default /usr/local/php80/etc/php-fpm.conf
$ cp /usr/local/php80/etc/php-fpm.d/www.conf.default /usr/local/php80/etc/php-fpm.d/www.conf
$ cp sapi/fpm/init.d.php-fpm /etc/init.d/php80-fpm
$ chmod +x /etc/init.d/php80-fpm

8. 验证配置门路

验证自定义的配置项是否失效:–with-config-file-path,–with-config-file-scan-dir

$ php80 --ini
Configuration File (php.ini) Path: /usr/local/php80/etc/
Loaded Configuration File:         /usr/local/php80/etc/php.ini
Scan for additional .ini files in: /usr/local/php80/etc/php.d/
Additional .ini files parsed:      (none)

9. 启动 FPM

$ /etc/init.d/php80-fpm start
Starting php-fpm  done

10. 验证 FPM

$ ps aux | grep php-fpm
root     26876  0.0  0.0  52084  2828 ?        Ss   Jul02   0:14 php-fpm: master process (/usr/local/php80/etc/php-fpm.conf)
nobody   26877  0.0  0.0  52084  3648 ?        S    Jul02   0:00 php-fpm: pool www
nobody   26878  0.0  0.0  52084  3624 ?        S    Jul02   0:00 php-fpm: pool www
$ /etc/init.d/php80-fpm -h
Usage: /etc/init.d/php80-fpm {start|stop|force-quit|restart|reload|status|configtest}
$ /etc/init.d/php80-fpm status
php-fpm (pid 26876) is running...
$ /etc/init.d/php80-fpm configtest
[06-Jul-2020 11:06:42] NOTICE: configuration file /usr/local/php80/etc/php-fpm.conf test is successful

这里省略掉了 Nginx 配置详情,次要是为了疾速测试装置的 PHP-FPM 模式是可用的。

// index.php
<?php
var_dump(PHP_VERSION);
var_dump(PHP_VERSION_ID);
$ curl localhost
string(11) "8.0.0alpha1"
int(80000)

11. 尝鲜新个性 JIT

机器配置:8 核 16G,SATA 盘,操作系统:CentOS Linux release 7.4.1708 (Core)
Zend OPCache(/usr/local/php80/etc/php.ini)配置如下,[opcache] 配置项大部分都有默认值,为了突显这些配置项的重要性还是列举了进去:

; 加载 Zend OPCache 扩大
zend_extension=opcache
; 启用 Zend OPCache
opcache.enable=1
; 启用 Zend OPCache,在 CLI 模式下
opcache.enable_cli=1
; OPCache 共享内存存储大小,默认值 128
opcache.memory_consumption=128
; interned string 内存大小,默认值 8
opcache.interned_strings_buffer=8
; 缓存脚本文件数量的下限,默认值 10000
opcache.max_accelerated_files=10000
; 10 秒查看一次文件的更新,默认值 2s
opcache.revalidate_freq=10
; 删除所有 PHPDoc 正文,默认值 1,示意保留正文
opcache.save_comments=0

这是一台资源闲暇的虚拟机,反复屡次开启 JIT、敞开 JIT 测试后果察看,后果值简直无什么变动。测试后果也没有特意去筛选其中一次最丑陋的数据,实际上也没这个必要。如下图所示:

12. 总结

这是一个通用性 PHP 源码编译装置办法,其它 PHP 版本编译装置形式相似,理论业务使用中 configure options 要丰盛的多,须要装置的类库也会更加全面。这篇文章中,测试了 PHP 8 的新个性 JIT,根据 Zend/bench.php 测试后果看,还是让大家眼前一亮的。对于 PHP 8 JIT 介绍,举荐 @Laruence《PHP8 新个性 JIT 应用简介》。

正文完
 0