Compare commits

...

16 Commits

Author SHA1 Message Date
Whale
d5ee452499 Update README.md 2021-06-06 00:00:00 +08:00
Whale
38e2b587e1 Update README.md 2021-06-05 23:48:37 +08:00
Whale
92a0078d54 Update README.md 2021-06-05 23:34:41 +08:00
e0c7963713 Merge branch 'master' of https://github.com/crazywhalecc/static-php-cli 2021-06-02 19:58:23 +08:00
Whale
1069ae3539 Update README.md 2021-06-03 22:06:48 +08:00
908f7c8b98 update Dockerfile 2021-06-02 19:57:55 +08:00
Whale
89a1526501 Create php-arg.sh 2021-06-02 00:35:07 +08:00
Whale
6e9a975e94 Create merge-curl-config.sh 2021-06-02 00:34:44 +08:00
Whale
b3cbf9cc37 Create ac_override_2 2021-06-02 00:34:25 +08:00
Whale
22ac543fe7 Create ac_override_1 2021-06-02 00:34:10 +08:00
Whale
cc3aa2ec44 Create Dockerfile 2021-06-02 00:33:47 +08:00
jerry
609790ea7b 升级到1.2.1版本,修复几个小问题,增加php7.2,更新swoole依赖版本到4.6.7 2021-05-31 20:30:14 +08:00
jerry
cb98414cef 升级到1.2.1版本,修复几个小问题,增加php7.2 2021-05-31 20:26:40 +08:00
Whale
85efd3275b Update README.md 2021-05-07 16:58:40 +08:00
Whale
2b3f736c68 Update static-compile-php.sh 2021-05-07 16:58:16 +08:00
Whale
18c74cdadb Update multi-version-build.sh 2021-05-07 16:57:17 +08:00
9 changed files with 432 additions and 64 deletions

113
README.md
View File

@@ -1,60 +1,78 @@
# static-php-cli # static-php-cli
Compile A Statically Linked PHP With Swoole and other Extensions. [English README](/README-en.md) Compile A Statically Linked PHP With Swoole and other Extensions. [English README](/README-en.md)
编译纯静态的 PHP Binary 二进制文件,带有各种扩展CLI 模式,暂不支持 CGI 和 FPM 模式) 编译纯静态的 PHP Binary 二进制文件,带有各种扩展,让 PHP-cli 应用变得更便携!
[![版本](https://img.shields.io/badge/version-1.2.0-green.svg)]() 注:只能编译 CLI 模式,暂不支持 CGI 和 FPM 模式
**这个分支是旧版本的纯 shell 脚本版本,新版本在 master 分支,换成了 Dockerfile 版本,可以更加便捷地在不同系统下进行构建了!**
[![版本](https://img.shields.io/badge/script--version-1.2.1-green.svg)]()
## 环境需求 ## 环境需求
- 目前在 x86_64 和 aarch64(arm64) 架构上编译成功,其他架构需自行测试 - 目前在 x86_64 和 aarch64(arm64) 架构上编译成功,其他架构需自行测试
- 需要 Alpine Linux测试环境为 3.13 版本,其他版本未测试)系统(也就是说需要 musl - 需要 Docker或等我将脚本提出来也可以直接在 Alpine Linux 上使用
- WSL2 也是支持的 - 脚本支持编译的 PHP 版本7.2 ~ 8.0
- 脚本支持编译的 PHP 版本 >= 7.3
## 开始 ## 开始
可以直接在旁边的 Release 中下载编译好的二进制,也可以自己编译 可以直接在旁边的 Release 中下载编译好的二进制。
```bash
# 自己编译
./static-compile-php.sh
# 完事后在 `php-dist/bin/php` 这个二进制文件可以随意拿着去任何一个 Linux 系统运行了!
# 多 PHP 版本一键编译 也可以自己使用 Dockerfile 进行编译构建:
./multi-version-compile.sh ```bash
# 结束后多个 PHP 版本的二进制文件会在 build/ 目录下。 git clone https://github.com/crazywhalecc/static-php-cli.git
cd static-php-cli/docker
docker build -t static-php .
``` ```
## 主分支版本 编译之后可以使用下方命令将二进制 PHP 提取出来,用以下方式:
- php: 7.4.18 ```bash
- libxml2: 2.9.10 mkdir dist
- curl: 7.76.1 docker run --rm -v $(pwd)/dist:/dist/ -it static cp php-dist/bin/php /dist/
```
## 包含扩展 如果要选择安装的扩展,可以修改 `docker/extensions.txt` 文件,具体规则如下:
- bcmath - 文件内使用 `#` 可以注释,表示不安装
- calendar - 扩展名一律使用小写,目前默认状态下文件内所列的扩展为支持的扩展,其他扩展暂不支持,如有需求请提 Issue 添加
- ctype
- filter ## 支持的扩展(对勾为已支持的扩展,未打勾的正在努力兼容)
- openssl - [X] bcmath
- pcntl - [X] calendar
- iconv - [X] ctype
- inotify (3.0.0) - [X] filter
- json - [X] openssl
- mbstring - [X] pcntl
- phar - [X] iconv
- curl - [X] inotify
- pdo - [X] json
- gd - [X] mbstring
- pdo_mysql - [X] phar
- mysqlnd - [X] curl
- sockets - [X] pdo
- swoole (4.6.6) - [X] gd
- redis (5.3.4) - [X] pdo_mysql
- simplexml - [X] mysqlnd
- dom - [X] sockets
- xml - [X] swoole
- xmlwriter - [X] redis
- xmlreader - [X] simplexml
- posix - [X] dom
- tokenizer - [X] xml
- [X] xmlwriter
- [X] xmlreader
- [X] posix
- [X] tokenizer
- [ ] zip
## 目前的问题(待解决的)
- [ ] event 扩展的 sockets 支持不能在静态编译中使用,因为静态内嵌编译暂时没办法调整扩展编译顺序。
- [ ] Swoole 扩展不支持 `--enable-swoole-curl`,也是因为编译顺序和加载顺序的问题。
- [ ] readline 扩展安装后无法正常使用 `php -a`,原因还没有弄清楚,可能是静态编译造成的 ncurses 库出现了问题。
## Todo List
- [X] curl/libcurl 扩展静态编译
- [X] 可自行选择不需要编译进入的扩展
- [ ] php.ini 内嵌或分发
- [ ] i18n国际化脚本本身和 README
## 运行示例 ## 运行示例
编译后的状态 编译后的状态
@@ -63,13 +81,6 @@ Compile A Statically Linked PHP With Swoole and other Extensions. [English READM
在不同系统直接运行 Swoft 在不同系统直接运行 Swoft
![image](https://user-images.githubusercontent.com/20330940/116053161-f16d7400-a6ac-11eb-87b8-e510c6454861.png) ![image](https://user-images.githubusercontent.com/20330940/116053161-f16d7400-a6ac-11eb-87b8-e510c6454861.png)
## Todo List
- [X] curl/libcurl 扩展静态编译
- [ ] 可自行选择不需要编译进入的扩展
- [ ] php.ini 内嵌或分发
- [ ] 尝试带进去个 composer其实自己下完全可以
- [ ] i18n国际化脚本本身和 README
## 参考资料 ## 参考资料
- <https://blog.terrywh.net/post/2019/php-static-openssl/> - <https://blog.terrywh.net/post/2019/php-static-openssl/>
- <https://stackoverflow.com/a/37245653> - <https://stackoverflow.com/a/37245653>

137
docker/Dockerfile Normal file
View File

@@ -0,0 +1,137 @@
from alpine:latest
# define script basic information
# Version of this Dockerfile
ENV SCRIPT_VERSION=1.3.0
# Download address uses backup address
# (if downloading slowly, consider set it to yes)
ENV USE_BACKUP=no
# Version of some manually-installed package
ENV VER_PHP=7.4.19
ENV VER_SWOOLE=4.6.7
ENV VER_HASH=1.5
ENV VER_INOTIFY=3.0.0
ENV VER_REDIS=5.3.4
ENV VER_LIBXML2=2.9.12
ENV VER_CURL=7.77.0
ENV VER_LIBLZMA=master
# LINK_OF_ADDRESS_ORIGIN
ENV LINK_APK_REPO='mirrors.ustc.edu.cn'
ENV LINK_APK_REPO_BAK='dl-cdn.alpinelinux.org'
RUN if [ "${USE_BACKUP}" = "yes" ]; then \
echo "Using backup address..." && sleep 3s; \
else \
echo "Using original address..." && sleep 3s; \
fi
RUN sed -i 's/dl-cdn.alpinelinux.org/'${LINK_APK_REPO}'/g' /etc/apk/repositories
# build requirements
RUN apk add cmake gcc g++ jq autoconf git libstdc++ linux-headers make m4 libgcc binutils ncurses
# php zlib dependencies
RUN apk add zlib-dev zlib-static
# php mbstring dependencies
RUN apk add oniguruma-dev
# php openssl dependencies
RUN apk add openssl-libs-static openssl-dev openssl
# php gd dependencies
RUN apk add libpng-dev libpng-static
# curl c-ares dependencies
RUN apk add c-ares-static c-ares-dev
RUN mkdir /app
WORKDIR /app
COPY download.sh /app/
COPY compile-php.sh /app/
RUN chmod +x /app/download.sh && \
chmod +x /app/compile-php.sh
RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE}
RUN ./download.sh hash ${USE_BACKUP} ${VER_HASH}
RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE}
RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE}
RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE}
RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE}
RUN ./download.sh swoole ${USE_BACKUP} ${VER_SWOOLE}
RUN wget "http://mirrors.zhamao.xin/php/php-${VER_PHP}.tar.gz" -O php.tar.gz
RUN wget "http://mirrors.zhamao.xin/pecl/swoole-${VER_SWOOLE}.tgz" -O swoole.tar.gz
RUN wget "http://mirrors.zhamao.xin/pecl/hash-${VER_HASH}.tgz" -O hash.tar.gz
RUN wget "http://mirrors.zhamao.xin/pecl/inotify-${VER_INOTIFY}.tgz" -O inotify.tar.gz
RUN wget "http://mirrors.zhamao.xin/pecl/redis-${VER_REDIS}.tgz" -O redis.tar.gz
RUN wget "https://dl.zhamao.me/libxml2/libxml2-${VER_LIBXML2}.tar.gz" -O libxml2.tar.gz
RUN wget "https://dl.zhamao.me/liblzma/liblzma.tar.gz"
RUN wget "https://dl.zhamao.me/curl/curl-${VER_CURL}.tar.gz" -O curl.tar.gz
RUN tar -xf php.tar.gz && \
tar -xf swoole.tar.gz && \
tar -xf hash.tar.gz && \
tar -xf inotify.tar.gz && \
tar -xf redis.tar.gz && \
tar -xf libxml2.tar.gz && \
tar -xf liblzma.tar.gz && \
tar -xf curl.tar.gz
RUN cd liblzma && \
./configure && \
make -j4 && \
make install && \
echo "liblzma compiled!"
RUN cd "libxml2-${VER_LIBXML2}" && \
./configure --with-lzma --without-python && \
make -j4 && \
make install && \
echo "libxml2 compiled!"
RUN cd "curl-${VER_CURL}" && \
CC=gcc CXX=g++ CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure \
--without-nghttp2 \
--with-ssl=/usr \
--with-pic=pic \
--enable-ipv6 \
--enable-shared=no \
--without-libidn2 \
--disable-ldap \
--without-libpsl \
--without-lber \
--enable-ares && \
make -j4 && \
make install && \
echo "curl compiled!"
COPY ac_override_1 /
COPY ac_override_2 /
COPY compile-php.sh /app/
RUN apk add bash
# copy
RUN mv "swoole-${VER_SWOOLE}" "php-${VER_PHP}/ext/swoole" && \
mv "redis-${VER_REDIS}" "php-${VER_PHP}/ext/redis" && \
mv "inotify-${VER_INOTIFY}" "php-${VER_PHP}/ext/inotify"
RUN cat /ac_override_1 /app/php-${VER_PHP}/ext/curl/config.m4 /ac_override_2 > /app/aa
RUN mv /app/aa /app/php-${VER_PHP}/ext/curl/config.m4
RUN cd "php-${VER_PHP}/ext/swoole/" && \
./clear.sh && \
cd ../../ && \
./buildconf --force
RUN ./compile-php.sh ${VER_PHP}
RUN cd "php-${VER_PHP}" && \
sed -ie 's/-export-dynamic//g' "Makefile" && \
sed -ie 's/-o \$(SAPI_CLI_PATH)/-all-static -o \$(SAPI_CLI_PATH)/g' "Makefile" && \
sed -ie 's/swoole_clock_gettime(CLOCK_REALTIME/clock_gettime(CLOCK_REALTIME/g' "ext/swoole/include/swoole.h" && \
make LDFLAGS=-ldl -j4 && \
make install && \
strip

3
docker/ac_override_1 Normal file
View File

@@ -0,0 +1,3 @@
AC_DEFUN([PHP_CHECK_LIBRARY], [
$3
])

18
docker/ac_override_2 Normal file
View File

@@ -0,0 +1,18 @@
AC_DEFUN([PHP_CHECK_LIBRARY], [
save_old_LDFLAGS=$LDFLAGS
ac_stuff="$5"
save_ext_shared=$ext_shared
ext_shared=yes
PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS)
AC_CHECK_LIB([$1],[$2],[
LDFLAGS=$save_old_LDFLAGS
ext_shared=$save_ext_shared
$3
],[
LDFLAGS=$save_old_LDFLAGS
ext_shared=$save_ext_shared
unset ac_cv_lib_$1[]_$2
$4
])dnl
])

87
docker/compile-php.sh Normal file
View File

@@ -0,0 +1,87 @@
#!/bin/sh
VER_PHP="$1"
function php_compile_args() {
_php_arg="--prefix=/app/php-dist"
_php_arg="$_php_arg --disable-all"
_php_arg="$_php_arg --enable-shared=no"
_php_arg="$_php_arg --enable-static=yes"
_php_arg="$_php_arg --enable-inline-optimization"
_php_arg="$_php_arg --with-layout=GNU"
_php_arg="$_php_arg --enable-calendar"
_php_arg="$_php_arg --enable-ctype"
_php_arg="$_php_arg --enable-filter"
_php_arg="$_php_arg --enable-openssl"
_php_arg="$_php_arg --enable-bcmath"
_php_arg="$_php_arg --enable-pcntl"
_php_arg="$_php_arg --enable-openssl"
_php_arg="$_php_arg --with-openssl"
_php_arg="$_php_arg --with-iconv"
_php_arg="$_php_arg --enable-mbstring"
_php_arg="$_php_arg --enable-phar"
_php_arg="$_php_arg --enable-pdo"
_php_arg="$_php_arg --with-pdo-mysql=mysqlnd"
_php_arg="$_php_arg --enable-sockets"
_php_arg="$_php_arg --enable-swoole"
_php_arg="$_php_arg --enable-inotify"
_php_arg="$_php_arg --enable-redis"
_php_arg="$_php_arg --disable-redis-session"
_php_arg="$_php_arg --enable-simplexml"
_php_arg="$_php_arg --enable-dom"
_php_arg="$_php_arg --enable-xml"
_php_arg="$_php_arg --enable-xmlwriter"
_php_arg="$_php_arg --enable-xmlreader"
_php_arg="$_php_arg --with-zlib"
_php_arg="$_php_arg --enable-posix"
_php_arg="$_php_arg --enable-mysqlnd"
_php_arg="$_php_arg --enable-tokenizer"
_php_arg="$_php_arg --with-curl"
_php_arg="$_php_arg --with-pear=no"
_php_arg="$_php_arg --disable-cgi"
_php_arg="$_php_arg --disable-phpdbg"
for loop in $(cat extension.txt)
do
case $loop in
swoole)
esac
done
case $1 in
7.3.*|7.2.*)
_php_arg="$_php_arg --with-gd"
_php_arg="$_php_arg --enable-libxml"
_php_arg="$_php_arg --enable-hash"
_php_arg="$_php_arg --enable-json"
;;
7.4.*)
_php_arg="$_php_arg --enable-gd"
_php_arg="$_php_arg --with-libxml"
_php_arg="$_php_arg --enable-json"
;;
8.*)
_php_arg="$_php_arg --enable-gd"
_php_arg="$_php_arg --with-libxml"
;;
esac
echo $_php_arg
}
function before_configure() {
for loop in $(cat extension.txt)
do
case $loop in
swoole)
esac
done
}
cd php-$VER_PHP && \
before_configure && \
./buildconf --force && \
./configure LDFLAGS=-static $(php_compile_args $VER_PHP) && \
after_configure && \
sed -ie 's/-export-dynamic//g' "Makefile" && \
sed -ie 's/-o $(SAPI_CLI_PATH)/-all-static -o $(SAPI_CLI_PATH)/g' "Makefile" && \
if [ "$(cat extension.txt | grep swoole)" != "" ]; then sed -ie 's/swoole_clock_gettime(CLOCK_REALTIME/clock_gettime(CLOCK_REALTIME/g' "ext/swoole/include/swoole.h" && \

3
docker/config.json Normal file
View File

@@ -0,0 +1,3 @@
swoole
redis
hello

109
docker/download.sh Normal file
View File

@@ -0,0 +1,109 @@
#!/bin/sh
_use_backup="$2"
function download_file() {
downloader="wget"
type wget >/dev/null 2>&1 || { downloader="curl"; }
if [ "$downloader" = "wget" ]; then
_down_prefix="O"
else
_down_prefix="o"
fi
_down_symbol=0
if [ ! -f "$2" ]; then
$downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \
echo "$1 完成! $2" && _down_symbol=1
else
echo "$2 已存在!" && _down_symbol=1
fi
if [ $_down_symbol == 0 ]; then
echo "下载 $1 失败!请检查网络连接!"
rm -rf "$2"
return 1
fi
return 0
}
function lib_download_link() {
if [ "$_use_backup" = "yes" ]; then
case $1 in
"php") echo "https://www.php.net/distributions/php-$2.tar.gz" ;;
"swoole") echo "https://pecl.php.net/get/swoole-$2.tgz" ;;
"hash") echo "https://pecl.php.net/get/hash-$2.tgz" ;;
"inotify") echo "https://pecl.php.net/get/inotify-$2.tgz" ;;
"redis") echo "https://pecl.php.net/get/redis-$2.tgz" ;;
"libxml2") echo "http://xmlsoft.org/sources/libxml2-$2.tar.gz" ;;
"liblzma") echo "https://github.com/kobolabs/liblzma/archive/refs/heads/master.zip" ;;
"curl") echo "https://curl.haxx.se/download/curl-$2.tar.gz" ;;
*) echo "unknown" ;;
esac
else
case $1 in
"php") echo "http://mirrors.zhamao.xin/php/php-$2.tar.gz" ;;
"swoole") echo "http://mirrors.zhamao.xin/pecl/swoole-$2.tgz" ;;
"hash") echo "http://mirrors.zhamao.xin/pecl/hash-$2.tgz" ;;
"inotify") echo "http://mirrors.zhamao.xin/pecl/inotify-$2.tgz" ;;
"redis") echo "http://mirrors.zhamao.xin/pecl/redis-$2.tgz" ;;
"libxml2") echo "https://dl.zhamao.me/libxml2/libxml2-$2.tar.gz" ;;
"liblzma") echo "https://dl.zhamao.me/liblzma/liblzma.tar.gz" ;;
"curl") echo "https://dl.zhamao.me/curl/curl-$2.tar.gz" ;;
*) echo "unknown" ;;
esac
fi
}
function lib_x_cmd() {
case $1 in
"php"|"swoole"|"hash"|"inotify"|"redis"|"libxml2"|"curl")
_x_cmd="tar"
;;
"liblzma") if [ "$_use_backup" = "yes" ]; then _x_cmd="unzip"; else _x_cmd="tar"; fi ;;
*) _x_cmd="unknown" ;;
esac
case $2 in
"cmd")
echo $_x_cmd
;;
"file-prefix")
case $_x_cmd in
"tar") echo "-zxvf" ;;
"unzip") echo "" ;;
esac
;;
"out-prefix")
case $_x_cmd in
"tar") echo "-C" ;;
"unzip") echo "-d" ;;
esac
;;
esac
}
function lib_x() {
$(lib_x_cmd $1 cmd) $(lib_x_cmd $1 file-prefix) "$_source_dir/$(lib_x_dirname $1 file)" $(lib_x_cmd $1 out-prefix) "$_source_dir/"
}
# 获取解压后的源码根目录
function lib_x_dirname() {
case $1 in
"php"|"swoole"|"hash"|"inotify"|"redis"|"libxml2"|"curl")
if [ "$2" = "file" ]; then _name_prefix=".tar.gz"; else _name_prefix=""; fi
echo "$1-$(lib_ver $1)$_name_prefix"
;;
"liblzma")
if [ "$_use_backup" = "yes" ]; then
if [ "$2" = "file" ]; then _name_prefix=".zip"; else _name_prefix=""; fi
echo "$1-$(lib_ver $1)$_name_prefix"
else
if [ "$2" = "file" ]; then _name_prefix=".tar.gz"; else _name_prefix=""; fi
echo "$1""$_name_prefix"
fi
;;
*)
echo "unknown"
;;
esac
}
download_file $(lib_download_link $1 $3) $(lib_x_firname $1 file)

View File

@@ -6,7 +6,7 @@ _build_dir="$_main_dir/build"
mkdir "$_build_dir" > /dev/null 2>&1 mkdir "$_build_dir" > /dev/null 2>&1
for loop in "7.3.28" "7.4.18" "8.0.5" for loop in "7.2.34" "7.3.28" "7.4.19" "8.0.6"
do do
sed -i 's/phpver"|"php") echo ".*/phpver"|"php") echo "'$loop'" ;;/g' "$_main_dir""static-compile-php.sh" && \ sed -i 's/phpver"|"php") echo ".*/phpver"|"php") echo "'$loop'" ;;/g' "$_main_dir""static-compile-php.sh" && \
rm -rf "$_main_dir""source/php.tar.gz" "$_main_dir""source/php-*" "$_main_dir""php-dist" && \ rm -rf "$_main_dir""source/php.tar.gz" "$_main_dir""source/php-*" "$_main_dir""php-dist" && \
@@ -20,4 +20,4 @@ do
echo "Compile static php-$loop failed!" echo "Compile static php-$loop failed!"
exit 1 exit 1
fi fi
done done

View File

@@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
_script_ver="1.2.0" _script_ver="1.2.1"
_use_backup="no" _use_backup="no"
_home_dir=$(pwd)"/" _home_dir=$(pwd)"/"
@@ -20,10 +20,10 @@ function download_file() {
$downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \ $downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \
echo "$1 完成! $2" && _down_symbol=1 echo "$1 完成! $2" && _down_symbol=1
else else
echo "$1 已存在!" && _down_symbol=1 echo "$2 已存在!" && _down_symbol=1
fi fi
if [ $_down_symbol == 0 ]; then if [ $_down_symbol == 0 ]; then
echo "失败!请检查网络连接!" echo "下载 $1 失败!请检查网络连接!"
rm -rf "$2" rm -rf "$2"
return 1 return 1
fi fi
@@ -33,8 +33,8 @@ function download_file() {
# 获取要下载的源码的版本号 # 获取要下载的源码的版本号
function lib_ver() { function lib_ver() {
case $1 in case $1 in
"phpver"|"php") echo "7.4.18" ;; "phpver"|"php") echo "7.3.28" ;;
"swoole") echo "4.6.6" ;; "swoole") echo "4.6.7" ;;
"hash") echo "1.5" ;; "hash") echo "1.5" ;;
"inotify") echo "3.0.0" ;; "inotify") echo "3.0.0" ;;
"redis") echo "5.3.4" ;; "redis") echo "5.3.4" ;;
@@ -83,11 +83,11 @@ function lib_download_link() {
esac esac
else else
case $1 in case $1 in
"php") echo "http://mirrors.sohu.com/php/php-$(lib_ver $1).tar.gz" ;; "php") echo "http://mirrors.zhamao.xin/php/php-$(lib_ver $1).tar.gz" ;;
"swoole") echo "https://dl.zhamao.me/swoole/swoole-$(lib_ver $1).tgz" ;; "swoole") echo "http://mirrors.zhamao.xin/pecl/swoole-$(lib_ver $1).tgz" ;;
"hash") echo "https://pecl.php.net/get/hash-$(lib_ver $1).tgz" ;; "hash") echo "http://mirrors.zhamao.xin/pecl/hash-$(lib_ver $1).tgz" ;;
"inotify") echo "https://pecl.php.net/get/inotify-$(lib_ver $1).tgz" ;; "inotify") echo "http://mirrors.zhamao.xin/pecl/inotify-$(lib_ver $1).tgz" ;;
"redis") echo "https://dl.zhamao.me/phpredis/redis-$(lib_ver $1).tgz" ;; "redis") echo "http://mirrors.zhamao.xin/pecl/redis-$(lib_ver $1).tgz" ;;
"libxml2") echo "https://dl.zhamao.me/libxml2/libxml2-$(lib_ver $1).tar.gz" ;; "libxml2") echo "https://dl.zhamao.me/libxml2/libxml2-$(lib_ver $1).tar.gz" ;;
"liblzma") echo "https://dl.zhamao.me/liblzma/liblzma.tar.gz" ;; "liblzma") echo "https://dl.zhamao.me/liblzma/liblzma.tar.gz" ;;
"curl") echo "https://dl.zhamao.me/curl/curl-$(lib_ver $1).tar.gz" ;; "curl") echo "https://dl.zhamao.me/curl/curl-$(lib_ver $1).tar.gz" ;;
@@ -261,7 +261,7 @@ function php_get_configure_args() {
_php_arg="$_php_arg --disable-phpdbg" _php_arg="$_php_arg --disable-phpdbg"
case $(lib_ver php) in case $(lib_ver php) in
7.3.*) 7.3.*|7.2.*)
_php_arg="$_php_arg --with-gd" _php_arg="$_php_arg --with-gd"
_php_arg="$_php_arg --enable-libxml" _php_arg="$_php_arg --enable-libxml"
_php_arg="$_php_arg --with-libxml-dir=$_opt_dir/libxml2" _php_arg="$_php_arg --with-libxml-dir=$_opt_dir/libxml2"