win11结合wsl2搭建开发环境之三:基于wsl子系统Ubuntu24.04,编译安装php5.6

基于wsl子系统Ubuntu24.04,编译安装php5.6

前置准备

安装依赖

apt install unzip \
gcc g++ \
openssl \
libssl-dev \
iptables \
libpcre3 \
libpcre3-dev \
libpam0g-dev \
libxslt1-dev \
libxml2-dev \
perl at gperf \
curl libcurl4t64 libcurl4-openssl-dev \
libzip-dev \
libbz2-dev \
libgd-dev \
libmcrypt-dev libtidy-dev \
libgeoip-dev \
libatomic-ops-dev \
zlib1g \
zlib1g-dev \
libsnmp-dev \
snmp-mibs-downloader \
libgmp-dev \
libfreetype6 \
libfreetype6-dev \
libfreetype-dev \
libc6-dev \
libglib2.0-0t64 \
libglib2.0-dev \
libmhash-dev \
libicu-dev \
libncurses5-dev \
libjpeg-dev \
libpng-dev \
libsqlite3-dev \
libonig-dev \
imagemagick \
libmagickwand-dev \
unixodbc \
unixodbc-dev \
libsodium-dev \
autoconf

mkdir -p /mnt/d/wsl/install

解决一些头部文件依赖不正确

ln -s /usr/include/x86_64-linux-gnu/curl /usr/include/curl
ln -s /usr/include/x86_64-linux-gnu/gmp.h /usr/include/gmp.h

创建用户

创建一个 nginx 用户,为了降低服务器风险,让 nginx 以最小的权限运行

useradd -s /sbin/nologin php

openssl

由于系统默认的openssl版本太高,而php5.6只能依赖1.0.2版本的,因此需要自己编译

wget https://www.openssl.org/source/openssl-1.0.2u.tar.gz
tar zxvf openssl-1.0.2u.tar.gz
cd openssl-1.0.2u
./config --prefix=/usr/local/openssl-1.0.2
make -j$(nproc) && make install -j$(nproc)

php5.6

编译安装

wget https://www.php.net/distributions/php-5.6.40.tar.gz
tar zxvf php-5.6.40.tar.gz
cd php-5.6.40

./configure --prefix=/usr/local/php5.6 \
--with-openssl=/usr/local/openssl-1.0.2 \
--with-gd \
--with-fpm-user=php \
--with-fpm-group=php \
--with-mysqli \
--with-pdo-mysql \
--with-curl \
--with-tidy \
--with-xmlrpc \
--with-xsl \
--with-zlib \
--with-pear \
--with-jpeg-dir \
--with-png-dir \
--with-freetype \
--with-gettext \
--with-mhash \
--with-pcre-regex  \
--with-kerberos \
--with-iconv \
--with-snmp \
--with-gmp \
--enable-bcmath \
--with-bz2 \
--enable-calendar \
--enable-exif \
--enable-ftp \
--enable-mbstring \
--enable-shmop \
--enable-soap \
--enable-sockets \
--enable-sysvsem \
--enable-sysvmsg \
--enable-sysvshm \
--enable-wddx \
--enable-xml \
--enable-zip \
--enable-inline-optimization \
--enable-session \
--enable-shared \
--enable-pcntl \
--enable-mbregex  \
--enable-gd-jis-conv \
--enable-fpm \
--enable-opcache \
--enable-dba 

make -j$(nproc) && make install -j$(nproc)

配置

配置ini

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

输出
Configuration File (php.ini) Path: /usr/local/php5.6/lib

说明 php 会自动读取放在 /usr/local/php5.6/lib 的 php.ini 配置文件,那我们下面就把 php.ini 放在 /usr/local/php5.6/lib 里面。
在php的源码目录里面有一个 php.ini-development 文件,将这个文件复制到我们现在所在目录的 lib 文件夹下,命名为 php.ini

cp /mnt/d/wsl/install/php-5.6.40/php.ini-development /usr/local/php5.6/lib/php.ini

然后就可以通过修改 php.ini 来开启各种需要的扩展,修改各种配置了。

配置fpm

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

将一些简单参数写进入

[global]
; 在php-fpm启动后,会将pid写在 /usr/local/php5.6/var/run/php-fpm.pid 这个文件
pid = run/php-fpm.pid
; php-fpm的错误日志
error_log = log/php-fpm.log
; 引入其他配置文件
include=etc/fpm.d/*.conf

其它的,就根据自己来

创建默认的配置文件

mkdir /usr/local/php5.6/etc/fpm.d
touch /usr/local/php5.6/etc/fpm.d/default.conf

文件内容保持空即可

使用systemctl管理

touch /etc/systemd/system/php5.6-fpm.service
vim /etc/systemd/system/php5.6-fpm.service

内容如下

[Unit]
Description=php5.6 fpm

[Service]
ExecStart=/usr/local/php5.6/sbin/php-fpm
ExecStop=kill -SIGINT `cat /usr/local/php5.6/var/run/php-fpm.pid`
ExecReload=/bin/bash -c "kill -SIGUSR2 `cat /usr/local/php5.6/var/run/php-fpm.pid`"
Restart=always
Type=forking

[Install]
WantedBy=multi-user.target

验证 是否正常运行

systemctl daemon-reload
systemctl stop php5.6-fpm
systemctl start php5.6-fpm
systemctl reload php5.6-fpm
systemctl restart php5.6-fpm

systemctl status php5.6-fpm
# 应显示 Active: active (running)

开机自启

systemctl enable php5.6-fpm

使用pecl安装扩展

安装扩展使用/usr/local/php5.6/bin/pecl

获取证书

pecl 安装扩展,是在 http://pecl.php.net/ 查找资源的,下载资源需要用https,下载最新的证书

cd /mnt/d/wsl/install
mkdir cacert
cd cacert
wget http://curl.haxx.se/ca/cacert.pem

查看 php 默认读取的证书位置

/usr/local/php5.6/bin/php -r "print_r(openssl_get_cert_locations());"

我本地输出如下

Array
(
    [default_cert_file] => /usr/local/openssl-1.0.2/ssl/cert.pem
    [default_cert_file_env] => SSL_CERT_FILE
    [default_cert_dir] => /usr/local/openssl-1.0.2/ssl/certs
    [default_cert_dir_env] => SSL_CERT_DIR
    [default_private_dir] => /usr/local/openssl-1.0.2/ssl/private
    [default_default_cert_area] => /usr/local/openssl-1.0.2/ssl
    [ini_cafile] =>
    [ini_capath] =>
)

第一个参数 [default_cert_file] 就是证书位置。
接下来将下载到的证书复制到对应的位置

cp cacert.pem /usr/local/openssl-1.0.2/ssl/cert.pem

配置pecl

配置 pecl 的 php_ini 路径

/usr/local/php5.6/bin/pear config-set php_ini /usr/local/php5.6/lib/php.ini

安装扩展

mysql

cd /mnt/d/wsl/install/php-5.6.40/ext/mysql
/usr/local/php5.6/bin/phpize
./configure --with-php-config=/usr/local/php5.6/bin/php-config
make && make install

增加配置: /usr/local/php5.6/lib/php.ini

[mysql]
extension="mysql.so"

redis

# 4.3.0是支持php5.6最后的版本
/usr/local/php5.6/bin/pecl install https://pecl.php.net/get/redis-4.3.0.tgz

yac

# 缓存扩展
# 0.9.2是支持php5.6最后的版本
# 以下从pecl安装会报错
/usr/local/php5.6/bin/pecl install https://pecl.php.net/get/yac-0.9.2.tgz

# 只能手动安装
cd /mnt/d/wsl/install/php-5.6.40/ext
wget https://github.com/laruence/yac/archive/yac-0.9.2.tar.gz
tar -xf yac-0.9.2.tar.gz
cd yac-0.9.2
/usr/local/php5.6/bin/phpize
./configure --with-php-config=/usr/local/php5.6/bin/php-config
make && make install

增加配置: /usr/local/php5.6/lib/php.ini

[yac]
extension=yac.so
yac.enable_cli = 1

xdebug

# 2.5.5是支持php5.6最后的版本
/usr/local/php5.6/bin/pecl install https://pecl.php.net/get/xdebug-2.5.5.tgz

增加配置: /usr/local/php5.6/lib/php.ini

[xdebug]
zend_extension="xdebug.so"
; Remote settings
xdebug.remote_autostart=on
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=172.22.240.1
xdebug.remote_port=9001
; General
xdebug.collect_includes=on
xdebug.collect_params=1
xdebug.collect_return=1
xdebug.default_enable=on
xdebug.extended_info=1
xdebug.manual_url=http://www.php.net
xdebug.show_local_vars=0
xdebug.show_mem_delta=1
xdebug.max_nesting_level=120
xdebug.idekey=phpstorm
; Trace options
xdebug.auto_trace=0
xdebug.trace_format=1
xdebug.trace_output_dir=/mnt/d/log/php5.6
xdebug.trace_options=0
xdebug.trace_output_name="xdebug_trace_%t"
; Profiling
xdebug.profiler_enable=0
xdebug.profiler_append=0
xdebug.profiler_enable_trigger=1
xdebug.profiler_output_dir=/mnt/d/log/php5.6
xdebug.profiler_output_name="xdebug_profiler_%t"

特别说明
xdebug.remote_host,该配置不是用localhost或者127.0.0.1。因为是xdebug的监控器,是跑在宿主机win11下的
而宿主机(win11)与wsl(Ubuntu)是处于不同的网络的!!!
宿主机(win11)内部ip
image
wsl(Ubuntu)内部ip
image

安装composer

# 支持php5.6的composer是2.2 LTS,其它版本已经不支持了
# 当前选择2.2.25
cd /mnt/d/wsl/install
wget https://github.com/composer/composer/releases/download/2.2.25/composer.phar
mv composer.phar /usr/local/bin/composer56

phpstorm调试

配置cli

image
image
image
image
image

配置项目

image
image
image

posted @ 2024-12-28 16:08  DavidHHuan  阅读(241)  评论(0)    收藏  举报