操作前建议把手机上的termux清除数据或者卸载termux重新安装

打开手机终端模拟器Termux,手动添加国内源

termux-change-repo

一、安装linux(ubuntu22.04)系统(可能需要vpn加速)

1)安装proot-distro

pkg update && pkg upgrade -y && pkg install -y proot-distro

期间出现停顿,一律输入 y 回车即可。

2)安装ubuntu22.04

proot-distro install ubuntu:22.04

3)登录ubuntu22.04

proot-distro login ubuntu

二、编译前准备(只要网络不掉线和有足够的耐心,保证百分百编译安装成功)

1)刷新系统安装gcc,make和perl等编译必须的工具链

apt update && apt install build-essential checkinstall curl wget -y

2)安装必备核心依赖库

apt install -y libxml2-dev \
libsqlite3-dev \
libonig-dev \
zlib1g-dev \
libzip-dev \
libgd-dev \
libjpeg-dev \
libpng-dev \
libfreetype6-dev \
libc6-dev \
libssl-dev \
libcurl4-openssl-dev

3)ubuntu22.04安装libfreetype依赖库时,一般都会缺失freetype-config核心文件

①尝试查看有无freetype-config文件

find /usr -name "freetype-config" 2>/dev/null

②不显示出路径说明没有这个文件,需手动创建freetype-config文件

tee /root/freetype-config <<EOF
#!/bin/sh
exec pkg-config freetype2 "\$@"
EOF
chmod +x freetype-config && mv freetype-config /usr/bin

如下图:
在这里插入图片描述
4)查找curl库所在的路径

dpkg -L libcurl4-openssl-dev

如下图:
在这里插入图片描述
①建立软链接:

ln -s /usr/include/aarch64-linux-gnu/curl /usr/include/

②查看

ls /usr/include/curl

如下图:
在这里插入图片描述
编译安装php5.6时记得把./configure下的–with-curl参数修改成:--with-curl=/usr/include/curl

5)ubuntu22.04安装gcc编译工具时,由于gcc版本过高而无法正常编译低版本的php,所以需要降级处理

①暂时写入旧源才能降级gcc

nano /etc/apt/sources.list

复制下面的内容粘贴进去(一般粘贴在底部)

deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ focal main universe

Ctrl+O回车保存,Ctrl+X退出,如下图:
在这里插入图片描述
②降级gcc和g++编译工具

apt update && apt install -y gcc-7 g++-7

③检查是否安装成功

gcc-7 --version && g++-7 --version

安装完gcc-7后,立刻把旧源注释/删掉,避免后续更新时出现版本冲突。这样既装好了gcc-7,又不影响系统后续更新。

nano /etc/apt/sources.list

确保对准的是刚添加的的旧源,Ctrl+K删除,Ctrl+O回车保存,Ctrl+X退出

如果还是降级不成功需要断开vpn代理,重新执行降级安装命令就会成功

编译安装php5.6-7.0依赖于openssl-1.0.2,编译安装php7.1-7.4依赖于openssl-1.1.1

6)进入openssl官网https://openssl-library.org/source/old/index.html查找openssl1.0.2k版本的下载链接

建议把源码下载到本地,再把源码上传到各大网盘收藏,防止官网哪一天会失联

①下载openssl1.0.2k并解压

wget https://www.openssl.org/source/openssl-1.0.2k.tar.gz && tar xvf openssl-1.0.2k.tar.gz && rm openssl-1.0.2k.tar.gz && cd openssl-1.0.2k

②生成配置脚本Makefile,后续配合make和make install完成编译安装。

CC=gcc-7 CXX=g++-7 ./config

③编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

④安装(需要些时间,请耐心等待跑完)

make install

安装之后会在/usr/local目录看到生成的ssl

ls /usr/local && cd

如下图:
在这里插入图片描述
⑤验证版本号

/usr/local/ssl/bin/openssl version && cd

⑥编译安装php5.6-7.0时记得把./configure下的–with-openssl参数修改成:--with-openssl=/usr/local/ssl

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

7)下载openssl1.1.1k并解压

wget https://github.com/openssl/openssl/releases/download/OpenSSL_1_1_1k/openssl-1.1.1k.tar.gz && tar xvf openssl-1.1.1k.tar.gz && rm openssl-1.1.1k.tar.gz && cd openssl-1.1.1k

编译安装openssl1.1.1k不能完全照搬1.0.2k的编译安装操作,因为OpenSSL1.1.1k 和1.0.2k版本架构差异较大

①生成配置脚本Makefile,后续配合make和make install完成编译安装。

CC=gcc-7 CXX=g++-7 ./config --prefix=/usr/local/ssl1.1 --openssldir=/usr/local/ssl1.1 shared zlib -Wl,-rpath=/usr/local/ssl1.1/lib

②编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

③安装(需要些时间,请耐心等待跑完)

make install

安装之后会在/usr/local目录看到生成的ssl1.1

ls /usr/local && cd

如下图:
在这里插入图片描述
④验证版本号

/usr/local/ssl1.1/bin/openssl version && cd

⑤编译安装php7.1-7.4时记得把./configure下的--with-openssl参数修改成:--with-openssl=/usr/local/ssl1.1,或者把路径添加在环境变量里

如果编译失败就清理旧的构建残留,重新编译,避免之前错误产物的干扰:

make clean && make distclean

三、编译安装php

下面以编译安装php5.6到php7.4为例

1)进入php官网https://www.php.net/releases/查找各种php的最后一个版本下载链接

建议把源码下载到本地,再把源码上传到各大网盘收藏,防止官网哪一天会失联

①下载php5.6并解压

wget https://www.php.net/distributions/php-5.6.40.tar.gz && tar xvf php-5.6.40.tar.gz && rm php-5.6.40.tar.gz && cd php-5.6.40

②生成php5.6专用的配置脚本Makefile(需要些时间,请耐心等待跑完)

CC=gcc-7 CXX=g++-7 ./configure \
--prefix=/usr/local/php5.6 \
--with-config-file-path=/usr/local/php5.6/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql \
--with-mysqli \
--enable-mbstring \
--enable-zip \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv \
--with-openssl=/usr/local/ssl \
--with-curl=/usr/include/curl

跑到最后如下图才算配置成功:
在这里插入图片描述
③编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

④安装 (需要些时间,请耐心等待跑完)

make install

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

⑤安装完成验证版本号

/usr/local/php5.6/bin/php -v

⑥把从源码编译出来的php.ini复制到已经安装好的php5.6指定配置文件路径

cp php.ini-development /usr/local/php5.6/etc/php.ini

php5.6需要把php.ini文件中的always_populate_raw_post_data = -1去除前面的;分号

nano /usr/local/php5.6/etc/php.ini

Ctrl+W启用搜索功能,复制always_populate_raw_post_data粘贴回车搜索,自动跳转到这一搜索项,把前面的分号;去掉即可,Ctrl+O回车保存,Ctrl+X退出

⑦创建php-fpm配置文件:

cd /usr/local/php5.6/etc && cp php-fpm.conf.default php-fpm.conf && cd

php5.6版本没有www.conf这个配置文件,可以乎略掉,有php-fpm.conf这个配置文件与nginx通信就足够了

⑧启动

/usr/local/php5.6/sbin/php-fpm

2)下载php7.0并解压

wget https://www.php.net/distributions/php-7.0.33.tar.gz && tar xvf php-7.0.33.tar.gz && rm php-7.0.33.tar.gz && cd php-7.0.33

①生成php7.0专用的配置脚本Makefile(需要些时间,请耐心等待跑完)

CC=gcc-7 CXX=g++-7 ./configure \
--prefix=/usr/local/php7.0 \
--with-config-file-path=/usr/local/php7.0/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql \
--with-mysqli \
--enable-mbstring \
--enable-zip \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv \
--with-openssl=/usr/local/ssl \
--with-curl

②编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

③安装 (需要些时间,请耐心等待跑完)

make install

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

④安装完成验证版本号

/usr/local/php7.0/bin/php -v

⑤把从源码编译出来的php.ini复制到已经安装好的php7.0指定配置文件路径

cp php.ini-development /usr/local/php7.0/etc/php.ini

⑥创建php-fpm配置文件:

cd /usr/local/php7.0/etc && cp php-fpm.conf.default php-fpm.conf && cd php-fpm.d && cp www.conf.default www.conf && cd

执行pkill -f php-fpm先终止前面已经运行的php-fpm再启动

⑦启动

/usr/local/php7.0/sbin/php-fpm

编译安装php7.1到php7.4,需要用到openssl1.1.1

3)下载php7.1并解压

wget https://www.php.net/distributions/php-7.1.33.tar.gz && tar xvf php-7.1.33.tar.gz && rm php-7.1.33.tar.gz && cd php-7.1.33

①生成php7.1专用的配置脚本Makefile(需要些时间,请耐心等待跑完)

CC=gcc-7 CXX=g++-7 ./configure \
--prefix=/usr/local/php7.1 \
--with-config-file-path=/usr/local/php7.1/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql \
--with-mysqli \
--enable-mbstring \
--enable-zip \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv \
--with-openssl=/usr/local/ssl1.1 \
--with-curl

②编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

③安装 (需要些时间,请耐心等待跑完)

make install

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

④安装完成验证版本号

/usr/local/php7.1/bin/php -v

⑤把从源码编译出来的php.ini复制到已经安装好的php7.1指定配置文件路径

cp php.ini-development /usr/local/php7.1/etc/php.ini

⑥创建php-fpm配置文件:

cd /usr/local/php7.1/etc && cp php-fpm.conf.default php-fpm.conf && cd php-fpm.d && cp www.conf.default www.conf && cd

执行pkill -f php-fpm先终止前面已经运行的php-fpm再启动

⑦启动

/usr/local/php7.1/sbin/php-fpm

4)下载php7.2并解压

wget https://www.php.net/distributions/php-7.2.33.tar.gz && tar xvf php-7.2.33.tar.gz && rm php-7.2.33.tar.gz && cd php-7.2.33

①生成php7.2专用的配置脚本Makefile(需要些时间,请耐心等待跑完)

CC=gcc-7 CXX=g++-7 ./configure \
--prefix=/usr/local/php7.2 \
--with-config-file-path=/usr/local/php7.2/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql \
--with-mysqli \
--enable-mbstring \
--enable-zip \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv \
--with-openssl=/usr/local/ssl1.1 \
--with-curl

②编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

③安装 (需要些时间,请耐心等待跑完)

make install

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

④安装完成验证版本号

/usr/local/php7.2/bin/php -v

⑤把从源码编译出来的php.ini复制到已经安装好的php7.2指定配置文件路径

cp php.ini-development /usr/local/php7.2/etc/php.ini

⑥创建php-fpm配置文件:

cd /usr/local/php7.2/etc && cp php-fpm.conf.default php-fpm.conf && cd php-fpm.d && cp www.conf.default www.conf && cd

执行pkill -f php-fpm先终止前面已经运行的php-fpm再启动

⑦启动

/usr/local/php7.2/sbin/php-fpm

5)下载php7.3并解压

wget https://www.php.net/distributions/php-7.3.33.tar.gz && tar xvf php-7.3.33.tar.gz && rm php-7.3.33.tar.gz && cd php-7.3.33

①生成php7.3专用的配置脚本Makefile(需要些时间,请耐心等待跑完)

CC=gcc-7 CXX=g++-7 ./configure \
--prefix=/usr/local/php7.3 \
--with-config-file-path=/usr/local/php7.3/etc \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql \
--with-mysqli \
--enable-mbstring \
--enable-zip \
--with-zlib \
--with-gd \
--with-jpeg-dir \
--with-png-dir \
--with-freetype-dir \
--with-iconv \
--with-openssl=/usr/local/ssl1.1 \
--with-curl

②编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

③安装 (需要些时间,请耐心等待跑完)

make install

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

④安装完成验证版本号

/usr/local/php7.3/bin/php -v

⑤把从源码编译出来的php.ini复制到已经安装好的php7.3指定配置文件路径

cp php.ini-development /usr/local/php7.3/etc/php.ini

⑥创建php-fpm配置文件:

cd /usr/local/php7.3/etc && cp php-fpm.conf.default php-fpm.conf && cd php-fpm.d && cp www.conf.default www.conf && cd

执行pkill -f php-fpm先终止前面已经运行的php-fpm再启动

⑦启动

/usr/local/php7.3/sbin/php-fpm

6)下载php7.4并解压

wget https://www.php.net/distributions/php-7.4.33.tar.gz && tar xvf php-7.4.33.tar.gz && rm php-7.4.33.tar.gz && cd php-7.4.33

①生成php7.4专用的配置脚本Makefile(需要些时间,请耐心等待跑完)

CC=gcc-7 CXX=g++-7 ./configure \
--prefix=/usr/local/php7.4 \
--with-config-file-path=/usr/local/php7.4/etc \
PKG_CONFIG_PATH=/usr/local/ssl1.1/lib/pkgconfig \
--enable-fpm \
--with-fpm-user=www-data \
--with-fpm-group=www-data \
--with-pdo-mysql \
--with-mysqli \
--enable-mbstring \
--with-zip \
--with-zlib \
--enable-gd \
--with-jpeg \
--with-freetype \
--with-iconv \
--with-openssl \
--with-curl

②编译(需要些时间,请耐心等待跑完)

make -j$(( $(nproc) - 1 ))

③安装 (需要些时间,请耐心等待跑完)

make install

如果编译失败就清理旧的构建残留重新编译,避免之前错误产物的干扰:

make clean && make distclean

④安装完成验证版本号

/usr/local/php7.4/bin/php -v

⑤把从源码编译出来的php.ini复制到已经安装好的php7.4指定配置文件路径

cp php.ini-development /usr/local/php7.4/etc/php.ini

⑥创建php-fpm配置文件:

cd /usr/local/php7.4/etc && cp php-fpm.conf.default php-fpm.conf && cd php-fpm.d && cp www.conf.default www.conf && cd

执行pkill -f php-fpm先终止前面已经运行的php-fpm再启动

⑦启动

/usr/local/php7.4/sbin/php-fpm

四、nginx对接php-fpm

1)安装nginx

apt install -y nginx

①删除default

rm /etc/nginx/sites-available/default

②重新创建default

nano /etc/nginx/sites-available/default

复制下面的内容粘贴进去:

server {
    listen 8080;
    server_name localhost;
    # 网站根目录要正确
    root /var/www/html;
    index index.php index.htm;

# 伪静态。找不到文件文件夹时交给index.php处理
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # 解析PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000; # 凡是对接编译安装的php都用9000端口通信
    }
}

③Ctrl+O回车保存,Ctrl+X退出

④启动nginx

nginx

⑤写入info.php到网站根目录

echo '<?php phpinfo(); ?>' > /var/www/html/info.php

⑥浏览器访问:

http://127.0.0.1:8080/info.php

2)各种网站源码的nginx配置模板

①基础nginx配置模板(常用于搭建wordpress等非ThinkPHP框架的网站源码)

server {
    listen 8080;
    server_name localhost;
    # 网站根目录要正确
    root /var/www/html;
    index index.php index.html;

    # 非ThinkPHP框架基础伪静态
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # 解析PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000; # 凡是对接编译安装的php都用9000端口通信
    }
}

②苹果cms影视网站nginx专用配置模板(需要php5.6-7.4)

server {
    listen 8080;
    server_name localhost;
    # 网站根目录要正确
    root /var/www/html;
    index index.php index.html;

    # 苹果cms伪静态
    location / {
        if (!-e $request_filename) {
            rewrite ^/index.php(.*)$ /index.php?s=$1 last;
            rewrite ^/api.php(.*)$ /api.php?s=$1 last;
            rewrite ^/admin.php(.*)$ /admin.php?s=$1 last;
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
    }

    # 解析PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000; # 凡是对接编译安装的php都用9000端口通信
    }
}

③v免签二开版nginx专用配置模板(需要php5.6-7.4)

server {
    listen 8080;
    server_name localhost;
    # 网站根目录要正确
    root /var/www/html/public;
    index index.php index.html;

    # ThinkPHP框架伪静态
    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
    }

    # 解析PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000; # 凡是对接编译安装的php都用9000端口通信
    }
}

搭建v免签二开版时从外部导入.sql数据库文件方法:
确保已经登录了数据,创建一个名为vmq专用于v免签的数据库,先执行USE vmq;切换到该数据库,再执行下面的语法导入:

source /var/www/html/pay.sql;

执行show tables;语法查询当前vmq数据库下所导入的列表内容

如果源码不在/var/www/html默认路径,执行命令导入.sql文件时,要注意修改命令中的正确路径

如果源码下载到手机本地,先执行USE vmq;切换到该数据库,再打开源码中的pay.sql文件,把里面的语法内容全部复制,然后回到该数据库粘贴即可导入

④v免签开源版nginx专用配置模板(需要php5.6-7.4)

server {
    listen 8080;
    server_name localhost;
    # 网站根目录要正确
    root /var/www/html/public;
    index index.html;

    # ThinkPHP框架伪静态
    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php?s=$1 last;
            break;
        }
    }

    # 解析PHP-FPM
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass 127.0.0.1:9000; # 凡是对接编译安装的php都用9000端口通信
    }
}

搭建v免签开源版时从外部导入.sql数据库文件方法:
确保已经登录了数据,创建一个名为vmq专用于v免签的数据库,先执行USE vmq;切换到该数据库,再执行下面的语法导入:

source /var/www/html/vmq.sql;

执行show tables;语法查询当前vmq数据库下所导入的列表内容

如果源码不在/var/www/html默认路径,执行命令导入.sql文件时,要注意修改命令中的正确路径

如果源码下载到手机本地,先执行USE vmq;切换到该数据库,再打开源码中的vmq.sql文件,把里面的语法内容全部复制,然后回到该数据库粘贴即可导入

更多推荐