编译安装PHP8.0测试版开启Opcache JIT

PHP已经进入了PHP8.0的测试研发阶段,其中就包括万众期待的PHP JIT新特性,这里我们尝新编译安装PHP8.0,并试着开启opcache中的JIT

环境:Debian10,假设已按照完成nginx

  1. 安装编译软件及依赖
apt install libonig-dev pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev git

2. 安装PHP常用的库依赖,这里是debian的,不同版本系统和不同类型的系统可能不一样,需要自己查找必须的依赖。

apt-get install libssl-dev zlib1g-dev libcurl4-gnutls-dev libpng-dev libonig-dev libsodium-dev libargon2-dev 

3. 下载PHP8测试版源码,这个是测试版的源码,实时更新,因此可能存在BUG甚至无法编译安装成功的情况。

git clone https://github.com/php/php-src.git
cd php-src
./buildconf

进行编译前config

./configure --prefix=/usr/local/php8 \
--with-config-file-path=/usr/local/php8/etc \
--with-config-file-scan-dir=/usr/local/php8/etc/php.d \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring  \
--enable-ftp  \
--enable-gd   \
--enable-opcache   \
--enable-gd-jis-conv \
--enable-mysqlnd \
--enable-pdo   \
--enable-sockets   \
--enable-fpm   \
--enable-xml  \
--enable-soap  \
--enable-pcntl   \
--enable-cli   \
--with-freetype   \
--with-jpeg \
--with-openssl  \
--with-mysqli=mysqlnd   \
--with-pdo-mysql=mysqlnd   \
--with-pear   \
--with-zlib  \
--with-iconv \
--with-curl \
--enable-bcmath \
--enable-shmop \
--enable-exif  \
--enable-sysvsem \
--enable-mbregex \
--with-password-argon2 \
--with-sodium=/usr/local \
--with-mhash \
--enable-ftp \
--enable-intl \
--with-xsl \
--with-gettext \
--with-zip \
--disable-debug  \
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig/: 

4.编译及安装

make & make test & make install

5. 配置与测试

/usr/local/php8/bin/php -v

增加全局php环境变量

vim /etc/profile

末尾增加

PATH=$PATH:/usr/local/php8/bin
export PATH

6.基础php配置

cp php.ini-production /usr/local/php8/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php8/etc/php-fpm.conf
cp /usr/local/php8/etc/php-fpm.d/www.conf.default /usr/local/php8/etc/php-fpm.d/www.conf
cp sapi/fpm/init.d.php-fpm /etc/init.d/php8-fpm
chmod +x /etc/init.d/php8-fpm
service php8-fpm start
systemctl enable php8-fpm

修改php配置,去掉 php8-fpm.conf中 pid = run/php8-fpm.pid 前面的分号

vim /usr/local/php8/etc/php-fpm.conf
pid = run/php8-fpm.pid 

修改www.conf中的启动用户和用户组为www-data已经监听端口为listen = 127.0.0.1:9080

user = www-data
group = www-data

listen = 127.0.0.1:9080

这里需要注意如果php-fpm无法使用service php-fpm start是可能因为系统启动项出现了误判,建议重启reboot再试。

7.开启opcache和JIT

cd /usr/local/php8/etc/php.d
vim 02-opcache.ini

增加以下内容:

[opcache]
zend_extension=opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=192
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=100000
opcache.max_wasted_percentage=5
opcache.use_cwd=1
opcache.validate_timestamps=1
opcache.revalidate_freq=60
;opcache.save_comments=0
opcache.fast_shutdown=1
opcache.consistency_checks=0
;opcache.optimization_level=0
#启动JIT
opcache.jit_buffer_size=64m
opcache.jit=1205

重启php-fpm

service php8-fpm restart

以上问题需要注意找到对应的扩展php.ini的文件夹再建立设置开启opcache的配置文件。

经过以上配置后,搭配nginx或者apache就可以启动php文件的解析。

8. 修改php对应的nginx配置,修改对应的nginx.conf文件或扩展的配置conf文件,包含内容类似如下酌情调整:

server {
        listen          80;
        server_name  test.sopans.com;
        access_log  /var/log/nginx/test.sopans.com.access.log  main;
        root   /var/www/html/test;
        index  index.html index.htm index.php;
 
        location ~ \.php {
                fastcgi_pass   127.0.0.1:9080;
                fastcgi_index  index.php;
                root   /var/www/html/test;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
#               fastcgi_split_path_info ^(.+\.php)(/.*)$;
#               fastcgi_param PATH_INFO $fastcgi_path_info;
                include        fastcgi_params;
        }  
 
}  

这里需要注意一个问题,就是有的配置文件中需要指明location ~ \.php 下的root文件夹,不然这个傻子php总是找不到php文件的位置。

经过以上设置,你可以测试一个phpinfo的文件进行测<?php echo phpinfo(); ?>

如果没有意外我们将看到php中正确开启了jit

发表评论

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