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

基于wsl子系统Ubuntu24.04,编译安装php7.4

前置准备

安装依赖

apt install zlib1g \
zlib1g-dev \
libpcre3 \
libpcre3-dev \
libfreetype6 \
libfreetype6-dev \
libssl-dev \
libcurl4-openssl-dev \
libxslt1-dev \
libgd-dev \
libc6-dev \
libglib2.0-0 \
libglib2.0-dev \
libmcrypt-dev \
libmhash-dev \
libicu-dev \
libncurses5-dev \
libjpeg-dev \
libpng-dev \
libxml2-dev \
libbz2-dev \
libsqlite3-dev \
libonig-dev \
imagemagick \
libmagickwand-dev \
unixodbc \
unixodbc-dev

mkdir -p /mnt/d/wsl/install

openssl3.3.2

https://github.com/openssl/openssl/releases/download/openssl-3.3.2/openssl-3.3.2.tar.gz
tar zxvf openssl-3.3.2.tar.gz
cd openssl-3.3.2
./config --prefix=/usr/local/openssl-3.3.2
make -j$(nproc) && make install -j$(nproc)

export OPENSSL_CFLAGS="-I/usr/local/openssl-3.3.2/include"
export OPENSSL_LIBS="-L/usr/local/openssl-3.3.2/lib"

php7.4

编译安装

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

./configure \
--prefix=/usr/local/php7.4 \
--enable-fpm \
--enable-gd \
--enable-soap \
--enable-intl \
--enable-pcntl \
--enable-mysqlnd \
--enable-ftp \
--enable-xml \
--enable-sockets \
--enable-mbstring \
--enable-bcmath \
--enable-sysvshm \
--enable-sysvmsg \
--enable-sysvsem \
--with-pdo-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-curl \
--with-webp \
--with-jpeg \
--with-freetype \
--with-openssl-dir=/usr/local/openssl-3.3.2 \
--with-zip \
--with-zlib \
--with-fpm-user=php \
--with-fpm-group=php \
--with-zlib-dir

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

配置

设置进程目录权限

chmod 775 -R /usr/local/php7.4/var/run

配置ini

/usr/local/php7.4/bin/php -ini | grep Configuration

输出
Configuration File (php.ini) Path => /usr/local/php7.4/lib

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

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

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

配置 fpm

cp /usr/local/php7.4/etc/php-fpm.conf.default /usr/local/php7.4/etc/php-fpm.conf
vim /usr/local/php7.4/etc/php-fpm.conf

根据自己具体情况修改

创建默认的配置文件

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

个性内容

;因为装了多个php版本,所以改下端口
listen = 127.0.0.1:9740
;访问日志
access.log = /mnt/d/log/php7.4/$pool.access.log
;慢日志
slowlog = /mnt/d/log/php7.4/$pool.slow.log
;慢日志超时时间
request_slowlog_timeout = 5

其它的根据自己具体情况修改

使用systemctl管理

# 进入php7.4源码目录
cd /mnt/d/wsl/install/php-7.4.33/
cp sapi/fpm/php-fpm.service /etc/systemd/system/php7.4-fpm.service

修改内容

ProtectSystem=false

验证 是否正常运行

systemctl daemon-reload
systemctl stop php7.4-fpm
systemctl start php7.4-fpm
systemctl reload php7.4-fpm
systemctl restart php7.4-fpm

systemctl status php7.4-fpm
# 应显示 Active: active (running)

开机自启

systemctl enable php7.4-fpm

解决openssl扩展不能正常启用

wget https://www.openssl.org/source/old/1.1.1/openssl-1.1.1w.tar.gz
tar zxvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
./Configure --prefix=/usr/local/openssl-1.1.1 --openssldir=/usr/local/openssl-1.1.1 -fPIC -shared linux-x86_64
make -j$(nproc) && make install -j$(nproc)

# 进入php7.4源码目录
cd /mnt/d/wsl/install/php-7.4.33/ext/openssl
cp config0.m4 config.m4
/usr/local/php7.4/bin/phpize
export OPENSSL_CFLAGS="-I/usr/local/openssl-1.1.1/include"
export OPENSSL_LIBS="-L/usr/local/openssl-1.1.1/lib"
./configure --with-openssl=/usr/local/openssl-1.1.1 --with-php-config=/usr/local/php7.4/bin/php-config
make -j$(nproc) && make install -j$(nproc)

修改php.ini,开启openssl

[openssl]
extension=openssl.so

重启fpm

systemctl status php7.4-fpm

使用pecl安装扩展

安装扩展使用/usr/local/php7.4/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/php7.4/bin/php -r "print_r(openssl_get_cert_locations());"

我本地输出如下

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

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

# 备份
cp /usr/lib/ssl/cert.pem /usr/lib/ssl/cert.pem_bak
cp /mnt/d/wsl/install/cacert/cacert.pem /usr/lib/ssl/cert.pem

安装pear

cd /mnt/d/wsl/install/
wget http://pear.php.net/go-pear.phar
/usr/local/php7.4/bin/php go-pear.phar

redis

# 使用当前最新的6.1.0
/usr/local/php7.4/bin/pecl install http://pecl.php.net/get/redis-6.1.0.tgz

增加配置: /usr/local/php7.4/lib/php.ini

[redis]
extension=redis.so

yac

/usr/local/php7.4/bin/pecl install http://pecl.php.net/get/yac-2.3.1.tgz

增加配置: /usr/local/php7.4/lib/php.ini

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

swoole

# 未试过其它版本是否正常,只是沿用了原项目使用的版本
/usr/local/php7.4/bin/pecl install http://pecl.php.net/get/swoole-4.5.11.tgz

增加配置: /usr/local/php7.4/lib/php.ini

[swoole]
extension=swoole.so

gettext

# php7.4源码目录
cd /mnt/d/wsl/install/php-7.4.33/ext/gettext
/usr/local/php7.4/bin/phpize
./configure --with-php-config=/usr/local/php7.4/bin/php-config
make -j$(nproc) && make install -j$(nproc)

增加配置: /usr/local/php7.4/lib/php.ini

[gettext]
extension=gettext.so

mongodb

# 使用当前最新的1.20.1
/usr/local/php7.4/bin/pecl install http://pecl.php.net/get/mongodb-1.20.1.tgz

增加配置: /usr/local/php7.4/lib/php.ini

[mongodb]
extension=mongodb.so

sdebug

# 由于安装了swoole,需要调试的话不能使用xdebug,只能使用修改过的sdebug
# 目前,swoole官方仓库,已经下线了sdebug扩展了
# 只找到了这个仓库: https://github.com/yanghuangsheng/sdebug
# 下载地址: https://codeload.github.com/yanghuangsheng/sdebug/zip/refs/tags/sdebug_2_9-beta

cd /mnt/d/wsl/install
curl -SL https://codeload.github.com/yanghuangsheng/sdebug/zip/refs/tags/sdebug_2_9-beta -o sdebug.zip
unzip sdebug.zip
cd sdebug-sdebug_2_9-beta
/usr/local/php7.4/bin/phpize
./configure --with-php-config=/usr/local/php7.4/bin/php-config
make -j$(nproc) && make install -j$(nproc)

增加配置: /usr/local/php7.4/lib/php.ini

[sdebug]
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=9741
; 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/php7.4
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/php7.4
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

# 使用当前最新版本: 2.8.4
cd /mnt/d/wsl/install
wget https://github.com/composer/composer/releases/download/2.8.4/composer.phar
mv composer.phar /usr/local/bin/composer74

phpstorm调试

配置cli

image
image
image
image
image

配置项目

image
image
image

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