mirror of
https://github.com/crazywhalecc/static-php-cli.git
synced 2026-07-03 23:05:41 +08:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7cb7facec3 | ||
|
|
cf42a4ee71 | ||
|
|
bce1d13d91 | ||
|
|
7ad936f8c2 | ||
|
|
b46b58ad49 | ||
|
|
189dc21f1a | ||
|
|
7bf38281d5 | ||
|
|
980d25c40a | ||
|
|
e1b0013201 | ||
|
|
50e5cea9fb | ||
|
|
6b258bee6b | ||
|
|
ad76951419 | ||
|
|
862f5e9924 | ||
|
|
0a4d604069 | ||
|
|
720341316b | ||
|
|
0d89397cca | ||
|
|
028063174c | ||
|
|
fbfed34dc9 | ||
|
|
ca226fe4d9 | ||
|
|
1902057be1 |
74
README-en.md
Normal file
74
README-en.md
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
# static-php-swoole
|
||||||
|
Compile A Statically Linked PHP With Swoole and other Extensions. [English README](/README-en.md)
|
||||||
|
|
||||||
|
BTW, It's only for CLI mode.
|
||||||
|
|
||||||
|
[]()
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
- Tested on `x86_64` and `aarch64` platform, others have not tested.
|
||||||
|
- Requiring Alpine Linux (version >= 3.13), or requiring musl-libc
|
||||||
|
- Support WSL2
|
||||||
|
- Supporting PHP version >= 7.3
|
||||||
|
|
||||||
|
## Start
|
||||||
|
You can directly download static binary in Release.
|
||||||
|
|
||||||
|
Here's help command to compile it yourself:
|
||||||
|
```bash
|
||||||
|
# Compile script
|
||||||
|
./static-compile-php.sh
|
||||||
|
# And now you get `php-dist/bin/php` file!
|
||||||
|
```
|
||||||
|
|
||||||
|
## Library version
|
||||||
|
- php: 7.4.18
|
||||||
|
- libxml2: 2.9.10
|
||||||
|
- curl: 7.76.1
|
||||||
|
|
||||||
|
## Including PHP extensions
|
||||||
|
- bcmath
|
||||||
|
- calendar
|
||||||
|
- ctype
|
||||||
|
- filter
|
||||||
|
- openssl
|
||||||
|
- pcntl
|
||||||
|
- iconv
|
||||||
|
- inotify (3.0.0)
|
||||||
|
- json
|
||||||
|
- mbstring
|
||||||
|
- phar
|
||||||
|
- curl
|
||||||
|
- pdo
|
||||||
|
- gd
|
||||||
|
- pdo_mysql
|
||||||
|
- mysqlnd
|
||||||
|
- sockets
|
||||||
|
- swoole (4.6.6)
|
||||||
|
- redis (5.3.4)
|
||||||
|
- simplexml
|
||||||
|
- dom
|
||||||
|
- xml
|
||||||
|
- xmlwriter
|
||||||
|
- xmlreader
|
||||||
|
- posix
|
||||||
|
- tokenizer
|
||||||
|
|
||||||
|
## Running preview
|
||||||
|
After-compile status
|
||||||
|

|
||||||
|
|
||||||
|
Run Swoft framework directly
|
||||||
|

|
||||||
|
|
||||||
|
## Todo List
|
||||||
|
- [X] curl/libcurl extension support
|
||||||
|
- [ ] Alternative extension compiling
|
||||||
|
- [ ] php.ini support
|
||||||
|
- [ ] Make composer together
|
||||||
|
- [ ] i18n
|
||||||
|
|
||||||
|
## References
|
||||||
|
- <https://blog.terrywh.net/post/2019/php-static-openssl/>
|
||||||
|
- <https://stackoverflow.com/a/37245653>
|
||||||
|
- <http://blog.gaoyuan.xyz/2014/04/09/statically-compile-php/>
|
||||||
27
README.md
27
README.md
@@ -1,13 +1,15 @@
|
|||||||
# static-php-swoole
|
# static-php-cli
|
||||||
Compile A Statically Linked PHP With Swoole and other Extensions
|
Compile A Statically Linked PHP With Swoole and other Extensions. [English README](/README-en.md)
|
||||||
|
|
||||||
编译纯静态的 PHP Binary 二进制文件,带有各种扩展(CLI 模式,暂不支持 CGI 和 FPM 模式)
|
编译纯静态的 PHP Binary 二进制文件,带有各种扩展(CLI 模式,暂不支持 CGI 和 FPM 模式)
|
||||||
|
|
||||||
[]()
|
[]()
|
||||||
|
|
||||||
## 环境需求
|
## 环境需求
|
||||||
- 目前在 x86_64 平台试验成功,其他架构需自行测试
|
- 目前在 x86_64 和 aarch64(arm64) 架构上编译成功,其他架构需自行测试
|
||||||
- 需要 Alpine Linux(测试环境为 3.13 版本,其他版本未测试)系统(也就是说需要 musl)
|
- 需要 Alpine Linux(测试环境为 3.13 版本,其他版本未测试)系统(也就是说需要 musl)
|
||||||
- WSL2 也是支持的
|
- WSL2 也是支持的
|
||||||
|
- 脚本支持编译的 PHP 版本 >= 7.3
|
||||||
|
|
||||||
## 开始
|
## 开始
|
||||||
可以直接在旁边的 Release 中下载编译好的二进制,也可以自己编译。
|
可以直接在旁边的 Release 中下载编译好的二进制,也可以自己编译。
|
||||||
@@ -15,8 +17,17 @@ Compile A Statically Linked PHP With Swoole and other Extensions
|
|||||||
# 自己编译
|
# 自己编译
|
||||||
./static-compile-php.sh
|
./static-compile-php.sh
|
||||||
# 完事后在 `php-dist/bin/php` 这个二进制文件可以随意拿着去任何一个 Linux 系统运行了!
|
# 完事后在 `php-dist/bin/php` 这个二进制文件可以随意拿着去任何一个 Linux 系统运行了!
|
||||||
|
|
||||||
|
# 多 PHP 版本一键编译
|
||||||
|
./multi-version-compile.sh
|
||||||
|
# 结束后多个 PHP 版本的二进制文件会在 build/ 目录下。
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 主分支版本
|
||||||
|
- php: 7.4.18
|
||||||
|
- libxml2: 2.9.10
|
||||||
|
- curl: 7.76.1
|
||||||
|
|
||||||
## 包含扩展
|
## 包含扩展
|
||||||
- bcmath
|
- bcmath
|
||||||
- calendar
|
- calendar
|
||||||
@@ -25,6 +36,7 @@ Compile A Statically Linked PHP With Swoole and other Extensions
|
|||||||
- openssl
|
- openssl
|
||||||
- pcntl
|
- pcntl
|
||||||
- iconv
|
- iconv
|
||||||
|
- inotify (3.0.0)
|
||||||
- json
|
- json
|
||||||
- mbstring
|
- mbstring
|
||||||
- phar
|
- phar
|
||||||
@@ -34,8 +46,8 @@ Compile A Statically Linked PHP With Swoole and other Extensions
|
|||||||
- pdo_mysql
|
- pdo_mysql
|
||||||
- mysqlnd
|
- mysqlnd
|
||||||
- sockets
|
- sockets
|
||||||
- swoole
|
- swoole (4.6.6)
|
||||||
- redis
|
- redis (5.3.4)
|
||||||
- simplexml
|
- simplexml
|
||||||
- dom
|
- dom
|
||||||
- xml
|
- xml
|
||||||
@@ -46,7 +58,7 @@ Compile A Statically Linked PHP With Swoole and other Extensions
|
|||||||
|
|
||||||
## 运行示例
|
## 运行示例
|
||||||
编译后的状态
|
编译后的状态
|
||||||

|

|
||||||
|
|
||||||
在不同系统直接运行 Swoft
|
在不同系统直接运行 Swoft
|
||||||

|

|
||||||
@@ -56,6 +68,7 @@ Compile A Statically Linked PHP With Swoole and other Extensions
|
|||||||
- [ ] 可自行选择不需要编译进入的扩展
|
- [ ] 可自行选择不需要编译进入的扩展
|
||||||
- [ ] php.ini 内嵌或分发
|
- [ ] php.ini 内嵌或分发
|
||||||
- [ ] 尝试带进去个 composer(其实自己下完全可以)
|
- [ ] 尝试带进去个 composer(其实自己下完全可以)
|
||||||
|
- [ ] i18n(国际化脚本本身和 README)
|
||||||
|
|
||||||
## 参考资料
|
## 参考资料
|
||||||
- <https://blog.terrywh.net/post/2019/php-static-openssl/>
|
- <https://blog.terrywh.net/post/2019/php-static-openssl/>
|
||||||
|
|||||||
6
multi-version-build.sh
Normal file → Executable file
6
multi-version-build.sh
Normal file → Executable file
@@ -6,14 +6,14 @@ _build_dir="$_main_dir/build"
|
|||||||
|
|
||||||
mkdir "$_build_dir" > /dev/null 2>&1
|
mkdir "$_build_dir" > /dev/null 2>&1
|
||||||
|
|
||||||
for loop in "7.4.16" "8.0.3"
|
for loop in "7.3.28" "7.4.18" "8.0.5"
|
||||||
do
|
do
|
||||||
sed -i 's/_php_ver=.*/_php_ver="'$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" && \
|
||||||
"$_main_dir""static-compile-php.sh" && \
|
"$_main_dir""static-compile-php.sh" && \
|
||||||
cp "$_main_dir""php-dist/bin/php" "$_build_dir/" && \
|
cp "$_main_dir""php-dist/bin/php" "$_build_dir/" && \
|
||||||
cd "$_build_dir/" && \
|
cd "$_build_dir/" && \
|
||||||
tar -zcvf "php-$loop-static-bin.tar.gz" "./php" && \
|
tar -zcvf "php-$loop-static-bin-"$(uname -m)".tar.gz" "./php" && \
|
||||||
mv "./php" "./php-$loop" && \
|
mv "./php" "./php-$loop" && \
|
||||||
cd "$_main_dir"
|
cd "$_main_dir"
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
|
|||||||
341
static-compile-php.sh
Normal file → Executable file
341
static-compile-php.sh
Normal file → Executable file
@@ -1,6 +1,13 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh
|
||||||
|
|
||||||
function downloadIt() {
|
_script_ver="1.2.0"
|
||||||
|
_use_backup="no"
|
||||||
|
|
||||||
|
_home_dir=$(pwd)"/"
|
||||||
|
_source_dir="$_home_dir""source"
|
||||||
|
_opt_dir="$_home_dir""opt"
|
||||||
|
|
||||||
|
function download_file() {
|
||||||
downloader="wget"
|
downloader="wget"
|
||||||
type wget >/dev/null 2>&1 || { downloader="curl"; }
|
type wget >/dev/null 2>&1 || { downloader="curl"; }
|
||||||
if [ "$downloader" = "wget" ]; then
|
if [ "$downloader" = "wget" ]; then
|
||||||
@@ -11,7 +18,7 @@ function downloadIt() {
|
|||||||
_down_symbol=0
|
_down_symbol=0
|
||||||
if [ ! -f "$2" ]; then
|
if [ ! -f "$2" ]; then
|
||||||
$downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \
|
$downloader "$1" -$_down_prefix "$2" >/dev/null 2>&1 && \
|
||||||
echo "$1 完成!" && _down_symbol=1
|
echo "$1 完成! $2" && _down_symbol=1
|
||||||
else
|
else
|
||||||
echo "$1 已存在!" && _down_symbol=1
|
echo "$1 已存在!" && _down_symbol=1
|
||||||
fi
|
fi
|
||||||
@@ -23,33 +30,99 @@ function downloadIt() {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
_script_ver="1.1.0"
|
# 获取要下载的源码的版本号
|
||||||
|
function lib_ver() {
|
||||||
|
case $1 in
|
||||||
|
"phpver"|"php") echo "7.4.18" ;;
|
||||||
|
"swoole") echo "4.6.6" ;;
|
||||||
|
"hash") echo "1.5" ;;
|
||||||
|
"inotify") echo "3.0.0" ;;
|
||||||
|
"redis") echo "5.3.4" ;;
|
||||||
|
"libxml2") echo "2.9.10" ;;
|
||||||
|
"curl") echo "7.76.1" ;;
|
||||||
|
"liblzma") echo "master" ;;
|
||||||
|
*) echo "unknown" ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
_php_ver="7.4.16"
|
# 获取解压后的源码根目录
|
||||||
_swoole_ver="4.6.6"
|
function lib_x_dirname() {
|
||||||
_redis_ver="5.3.4"
|
case $1 in
|
||||||
_libxml2_ver="2.9.10"
|
"php"|"swoole"|"hash"|"inotify"|"redis"|"libxml2"|"curl")
|
||||||
_curl_ver="7.76.1"
|
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
|
||||||
|
}
|
||||||
|
|
||||||
# 默认编译在脚本当前目录
|
# 获取要下载的源码的链接地址
|
||||||
_home_dir=$(pwd)"/"
|
function lib_download_link() {
|
||||||
|
if [ "$_use_backup" = "yes" ]; then
|
||||||
|
case $1 in
|
||||||
|
"php") echo "https://www.php.net/distributions/php-$(lib_ver $1).tar.gz" ;;
|
||||||
|
"swoole") echo "https://pecl.php.net/get/swoole-$(lib_ver $1).tgz" ;;
|
||||||
|
"hash") echo "https://pecl.php.net/get/hash-$(lib_ver $1).tgz" ;;
|
||||||
|
"inotify") echo "https://pecl.php.net/get/inotify-$(lib_ver $1).tgz" ;;
|
||||||
|
"redis") echo "https://pecl.php.net/get/redis-$(lib_ver $1).tgz" ;;
|
||||||
|
"libxml2") echo "http://xmlsoft.org/sources//libxml2-$(lib_ver $1).tar.gz" ;;
|
||||||
|
"liblzma") echo "https://github.com/kobolabs/liblzma/archive/refs/heads/master.zip" ;;
|
||||||
|
"curl") echo "https://curl.haxx.se/download/curl-$(lib_ver $1).tar.gz" ;;
|
||||||
|
*) echo "unknown" ;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
case $1 in
|
||||||
|
"php") echo "http://mirrors.sohu.com/php/php-$(lib_ver $1).tar.gz" ;;
|
||||||
|
"swoole") echo "https://dl.zhamao.me/swoole/swoole-$(lib_ver $1).tgz" ;;
|
||||||
|
"hash") echo "https://pecl.php.net/get/hash-$(lib_ver $1).tgz" ;;
|
||||||
|
"inotify") echo "https://pecl.php.net/get/inotify-$(lib_ver $1).tgz" ;;
|
||||||
|
"redis") echo "https://dl.zhamao.me/phpredis/redis-$(lib_ver $1).tgz" ;;
|
||||||
|
"libxml2") echo "https://dl.zhamao.me/libxml2/libxml2-$(lib_ver $1).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" ;;
|
||||||
|
*) echo "unknown" ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# PHP使用国内的搜狐镜像
|
# 获取下载后源码包的解压命令
|
||||||
_php_down_link="http://mirrors.sohu.com/php/php-$_php_ver.tar.gz"
|
function lib_x_cmd() {
|
||||||
# swoole使用自建的炸毛服务器的分发,因为pecl有时候在国内奇慢
|
case $1 in
|
||||||
_swoole_down_link="https://dl.zhamao.me/swoole/swoole-$_swoole_ver.tgz"
|
"php"|"swoole"|"hash"|"inotify"|"redis"|"libxml2"|"curl")
|
||||||
_swoole_down_link_bak="https://pecl.php.net/get/swoole-$_swoole_ver.tgz"
|
_x_cmd="tar"
|
||||||
# phpredis也使用自建的炸毛服务器分发
|
;;
|
||||||
_redis_down_link="https://dl.zhamao.me/phpredis/redis-$_redis_ver.tgz"
|
"liblzma") if [ "$_use_backup" = "yes" ]; then _x_cmd="unzip"; else _x_cmd="tar"; fi ;;
|
||||||
_redis_down_link_bak="https://pecl.php.net/get/redis-$_redis_ver.tgz"
|
*) _x_cmd="unknown" ;;
|
||||||
# libxml2也使用自建的服务器
|
esac
|
||||||
_libxml2_down_link="https://dl.zhamao.me/libxml2/libxml2-$_libxml2_ver.tar.gz"
|
case $2 in
|
||||||
_libxml2_down_link_bak="http://xmlsoft.org/sources/libxml2-$_libxml2_ver.tar.gz"
|
"cmd")
|
||||||
# liblzma是自建的服务器,如果需要找原始位置,在GitHub搜索liblzma即可
|
echo $_x_cmd
|
||||||
_liblzma_down_link="https://dl.zhamao.me/liblzma/liblzma.tar.gz"
|
;;
|
||||||
# curl/libcurl使用自建的服务器,bak是源地址
|
"file-prefix")
|
||||||
_curl_down_link="https://dl.zhamao.me/curl/curl-$_curl_ver.tar.gz"
|
case $_x_cmd in
|
||||||
_curl_down_link_bak="https://curl.haxx.se/download/curl-$_curl_ver.tar.gz"
|
"tar") echo "-xf" ;;
|
||||||
|
"unzip") echo "" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
"out-prefix")
|
||||||
|
case $_x_cmd in
|
||||||
|
"tar") echo "-C" ;;
|
||||||
|
"unzip") echo "-d" ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
_curl_override_1='
|
_curl_override_1='
|
||||||
AC_DEFUN([PHP_CHECK_LIBRARY], [
|
AC_DEFUN([PHP_CHECK_LIBRARY], [
|
||||||
@@ -78,52 +151,47 @@ AC_DEFUN([PHP_CHECK_LIBRARY], [
|
|||||||
])
|
])
|
||||||
'
|
'
|
||||||
|
|
||||||
function downloadAll() {
|
function lib_x() {
|
||||||
mkdir "$_home_dir""source" > /dev/null 2>&1
|
$(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/"
|
||||||
|
}
|
||||||
|
|
||||||
echo "正在下载 php 源码 "$_php_down_link" ..."
|
function lib_move_ext() {
|
||||||
downloadIt $_php_down_link "$_home_dir""source/php.tar.gz" || { exit 1; } &
|
_src_dir="$_source_dir/$(lib_x_dirname $1)"
|
||||||
|
_dst_dir="$_source_dir/$(lib_x_dirname php)/ext/$1"
|
||||||
|
mv $_src_dir $_dst_dir
|
||||||
|
}
|
||||||
|
|
||||||
#echo "正在下载 openssl 源码 "$_openssl_down_link" ..."
|
function download_all() {
|
||||||
#downloadIt $_openssl_down_link "$_home_dir""source/openssl.tar.gz" || { exit; } &
|
mkdir "$_source_dir" > /dev/null 2>&1
|
||||||
|
|
||||||
echo "正在下载 swoole 源码 "$_swoole_down_link" ..."
|
for loop in "php" "swoole" "inotify" "hash" "redis" "libxml2" "liblzma" "curl"
|
||||||
downloadIt $_swoole_down_link "$_home_dir""source/swoole.tar.gz" || { exit 1; } &
|
do
|
||||||
|
echo "正在下载 $loop 源码 ..."
|
||||||
echo "正在下载 redis 源码 "$_redis_down_link" ..."
|
download_file $(lib_download_link $loop) "$_source_dir/$(lib_x_dirname $loop file)" || { exit 1; } &
|
||||||
downloadIt $_redis_down_link "$_home_dir""source/redis.tar.gz" || { exit 1; } &
|
done
|
||||||
|
|
||||||
echo "正在下载 libxml2 源码 ..."
|
|
||||||
downloadIt $_libxml2_down_link "$_home_dir""source/libxml2.tar.gz" || { exit 1; } &
|
|
||||||
|
|
||||||
echo "正在下载 liblzma 源码 ..."
|
|
||||||
downloadIt $_liblzma_down_link "$_home_dir""source/liblzma.tar.gz" || { exit 1; } &
|
|
||||||
|
|
||||||
echo "正在下载 curl 源码 ..."
|
|
||||||
downloadIt $_curl_down_link "$_home_dir""source/curl.tar.gz" || { exit 1; } &
|
|
||||||
|
|
||||||
wait
|
wait
|
||||||
}
|
}
|
||||||
|
|
||||||
function compileLiblzma() {
|
function compile_liblzma() {
|
||||||
if [ -f "$_home_dir""opt/liblzma/lib/liblzma.so" ]; then
|
if [ -f "$_opt_dir/liblzma/lib/liblzma.so" ]; then
|
||||||
echo "已编译 liblzma!" && return
|
echo "已编译 liblzma!" && return
|
||||||
fi
|
fi
|
||||||
tar -xf "$_home_dir""source/liblzma.tar.gz" -C "$_home_dir""source/" && \
|
tar -xf "$_source_dir/$(lib_x_dirname liblzma file)" -C "$_source_dir/" && \
|
||||||
cd "$_home_dir""source/liblzma" && \
|
cd "$_source_dir/$(lib_x_dirname liblzma)" && \
|
||||||
./configure --prefix="$_home_dir""opt/liblzma" && \
|
./configure --prefix="$_opt_dir/liblzma" && \
|
||||||
make -j4 && \
|
make -j4 && \
|
||||||
make install && \
|
make install && \
|
||||||
echo "编译 liblzma 完成!"
|
echo "编译 liblzma 完成!"
|
||||||
}
|
}
|
||||||
|
|
||||||
function compileCurl() {
|
function compile_curl() {
|
||||||
if [ -f "$_home_dir""opt/curl/bin/curl" ]; then
|
if [ -f "$_opt_dir/curl/bin/curl" ]; then
|
||||||
echo "已编译 curl!" && return
|
echo "已编译 curl!" && return
|
||||||
fi
|
fi
|
||||||
tar -xf "$_home_dir""source/curl.tar.gz" -C "$_home_dir""source/" && \
|
lib_x curl && \
|
||||||
cd "$_home_dir""source/curl-""$_curl_ver" && \
|
cd "$_source_dir/$(lib_x_dirname curl)" && \
|
||||||
CC=gcc CXX=g++ CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$_home_dir""opt/curl" \
|
CC=gcc CXX=g++ CFLAGS=-fPIC CPPFLAGS=-fPIC ./configure --prefix="$_opt_dir/curl" \
|
||||||
--without-nghttp2 \
|
--without-nghttp2 \
|
||||||
--with-ssl=/usr \
|
--with-ssl=/usr \
|
||||||
--with-pic=pic \
|
--with-pic=pic \
|
||||||
@@ -139,82 +207,102 @@ function compileCurl() {
|
|||||||
echo "编译 curl 完成!"
|
echo "编译 curl 完成!"
|
||||||
}
|
}
|
||||||
|
|
||||||
function compileLibxml2() {
|
function compile_libxml2() {
|
||||||
if [ -f "$_home_dir""opt/libxml2/lib/libxml2.so" ]; then
|
if [ -f "$_opt_dir/libxml2/lib/libxml2.so" ]; then
|
||||||
echo "已编译 libxml2!" && return
|
echo "已编译 libxml2!" && return
|
||||||
fi
|
fi
|
||||||
tar -xf "$_home_dir""source/libxml2.tar.gz" -C "$_home_dir""source/" && \
|
lib_x libxml2 && \
|
||||||
cd "$_home_dir""source/libxml2-""$_libxml2_ver" && \
|
cd "$_source_dir/$(lib_x_dirname libxml2)" && \
|
||||||
./configure --with-lzma="$_home_dir""opt/liblzma" --prefix="$_home_dir""opt/libxml2" --exec-prefix="$_home_dir""opt/libxml2" --without-python && \
|
./configure --with-lzma="$_opt_dir/liblzma" --prefix="$_opt_dir/libxml2" --exec-prefix="$_opt_dir/libxml2" --without-python && \
|
||||||
make -j4 && \
|
make -j4 && \
|
||||||
make install && \
|
make install && \
|
||||||
echo "编译 libxml2 完成!"
|
echo "编译 libxml2 完成!"
|
||||||
}
|
}
|
||||||
|
|
||||||
function compilePHPWithSwoole() {
|
function php_get_configure_args() {
|
||||||
|
_php_arg="--prefix=$_home_dir""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 --with-openssl-dir=/usr"
|
||||||
|
_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-json"
|
||||||
|
_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"
|
||||||
|
|
||||||
|
case $(lib_ver php) in
|
||||||
|
7.3.*)
|
||||||
|
_php_arg="$_php_arg --with-gd"
|
||||||
|
_php_arg="$_php_arg --enable-libxml"
|
||||||
|
_php_arg="$_php_arg --with-libxml-dir=$_opt_dir/libxml2"
|
||||||
|
_php_arg="$_php_arg --enable-hash"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
_php_arg="$_php_arg --enable-gd"
|
||||||
|
_php_arg="$_php_arg --with-libxml"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
echo $_php_arg
|
||||||
|
}
|
||||||
|
|
||||||
|
function compile_php() {
|
||||||
echo "正在编译 php ..." && \
|
echo "正在编译 php ..." && \
|
||||||
rm -rf "$_home_dir""source/php-""$_php_ver" && \
|
rm -rf "$_source_dir/$(lib_x_dirname php)" && \
|
||||||
tar -xf "$_home_dir""source/php.tar.gz" -C "$_home_dir""source/" && \
|
lib_x php && \
|
||||||
#git clone --depth=1 https://fgit.zhamao.me/swoole/swoole-src.git "$_home_dir""source/"swoole-$_swoole_ver && \
|
lib_x swoole && \
|
||||||
tar -xf "$_home_dir""source/swoole.tar.gz" -C "$_home_dir""source/" && \
|
lib_move_ext swoole && \
|
||||||
mv "$_home_dir""source/swoole-""$_swoole_ver" "$_home_dir""source/php-""$_php_ver/ext/swoole" && \
|
"$_source_dir/$(lib_x_dirname php)/ext/swoole/clear.sh" && \
|
||||||
"$_home_dir""source/php-""$_php_ver/ext/swoole/clear.sh" && \
|
lib_x redis && \
|
||||||
tar -xf "$_home_dir""source/redis.tar.gz" -C "$_home_dir""source/" && \
|
lib_move_ext redis && \
|
||||||
mv "$_home_dir""source/redis-""$_redis_ver" "$_home_dir""source/php-""$_php_ver/ext/redis" && \
|
lib_x inotify && \
|
||||||
cd "$_home_dir""source/php-""$_php_ver/" && \
|
lib_move_ext inotify && \
|
||||||
|
cd "$_source_dir/$(lib_x_dirname php)/" && \
|
||||||
echo "$_curl_override_1" > "$_home_dir""ac_override_1" && \
|
echo "$_curl_override_1" > "$_home_dir""ac_override_1" && \
|
||||||
echo "$_curl_override_2" > "$_home_dir""ac_override_2" && \
|
echo "$_curl_override_2" > "$_home_dir""ac_override_2" && \
|
||||||
cat "$_home_dir""ac_override_1" "$_home_dir""source/php-""$_php_ver/ext/curl/config.m4" "$_home_dir""ac_override_2" > /tmp/aa && \
|
cat "$_home_dir""ac_override_1" "ext/curl/config.m4" "$_home_dir""ac_override_2" > /tmp/aa && \
|
||||||
mv /tmp/aa "$_home_dir""source/php-""$_php_ver/ext/curl/config.m4" && \
|
mv /tmp/aa "ext/curl/config.m4" && \
|
||||||
|
rm -rf "$_home_dir""ac_override_1" "$_home_dir""ac_override_2" && \
|
||||||
|
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:""$_opt_dir/libxml2/lib/pkgconfig" && \
|
||||||
|
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:""$_opt_dir/curl/lib/pkgconfig" && \
|
||||||
./buildconf --force && \
|
./buildconf --force && \
|
||||||
PKG_CONFIG_PATH="$PKG_CONFIG_PATH:""$_home_dir""opt/curl/lib/pkgconfig" ./configure LDFLAGS=-static \
|
PKG_CONFIG_PATH=$PKG_CONFIG_PATH ./configure LDFLAGS=-static $(php_get_configure_args) && \
|
||||||
--prefix="$_home_dir""php-dist" \
|
sed -ie 's/-export-dynamic//g' "$_source_dir/$(lib_x_dirname php)/Makefile" && \
|
||||||
--disable-all \
|
sed -ie 's/-o $(SAPI_CLI_PATH)/-all-static -o $(SAPI_CLI_PATH)/g' "$_source_dir/$(lib_x_dirname php)/Makefile" && \
|
||||||
--enable-shared=no \
|
sed -ie 's/swoole_clock_gettime(CLOCK_REALTIME/clock_gettime(CLOCK_REALTIME/g' "$_source_dir/$(lib_x_dirname php)/ext/swoole/include/swoole.h" && \
|
||||||
--enable-static=yes \
|
|
||||||
--enable-inline-optimization \
|
|
||||||
--with-layout=GNU \
|
|
||||||
--enable-calendar \
|
|
||||||
--enable-ctype \
|
|
||||||
--enable-filter \
|
|
||||||
--enable-openssl \
|
|
||||||
--enable-bcmath \
|
|
||||||
--with-openssl-dir="/usr" \
|
|
||||||
--enable-pcntl \
|
|
||||||
--enable-openssl \
|
|
||||||
--with-openssl \
|
|
||||||
--with-iconv \
|
|
||||||
--enable-json \
|
|
||||||
--enable-mbstring \
|
|
||||||
--enable-phar \
|
|
||||||
--enable-pdo \
|
|
||||||
--with-pdo-mysql=mysqlnd \
|
|
||||||
--enable-sockets \
|
|
||||||
--enable-swoole \
|
|
||||||
--enable-gd \
|
|
||||||
--enable-redis \
|
|
||||||
--disable-redis-session \
|
|
||||||
--enable-simplexml \
|
|
||||||
--enable-dom \
|
|
||||||
--with-libxml="$_home_dir""opt/libxml2" \
|
|
||||||
--enable-xml \
|
|
||||||
--enable-xmlwriter \
|
|
||||||
--enable-xmlreader \
|
|
||||||
--with-zlib \
|
|
||||||
--enable-posix \
|
|
||||||
--enable-mysqlnd \
|
|
||||||
--enable-tokenizer \
|
|
||||||
--with-curl="$_home_dir""opt/curl" \
|
|
||||||
--with-pear=no \
|
|
||||||
--disable-pear \
|
|
||||||
--disable-cgi \
|
|
||||||
--disable-phpdbg && \
|
|
||||||
sed -ie 's/-export-dynamic//g' "$_home_dir""source/php-""$_php_ver/Makefile" && \
|
|
||||||
sed -ie 's/-o $(SAPI_CLI_PATH)/-all-static -o $(SAPI_CLI_PATH)/g' "$_home_dir""source/php-""$_php_ver/Makefile" && \
|
|
||||||
sed -ie 's/swoole_clock_gettime(CLOCK_REALTIME/clock_gettime(CLOCK_REALTIME/g' "$_home_dir""source/php-""$_php_ver/ext/swoole/include/swoole.h" && \
|
|
||||||
make LDFLAGS=-ldl -j4 && \
|
make LDFLAGS=-ldl -j4 && \
|
||||||
make install && \
|
make install && \
|
||||||
strip "$_home_dir""php-dist/bin/php"
|
strip "$_home_dir""php-dist/bin/php" && \
|
||||||
|
cd $_home_dir
|
||||||
}
|
}
|
||||||
|
|
||||||
#apk add g++ pkgconf autoconf nghttp2 libcurl \
|
#apk add g++ pkgconf autoconf nghttp2 libcurl \
|
||||||
@@ -231,11 +319,14 @@ apk add oniguruma-dev
|
|||||||
apk add openssl-libs-static openssl-dev openssl
|
apk add openssl-libs-static openssl-dev openssl
|
||||||
# php的gd支持,如果不需要gd则去掉--enable-gd和下面的依赖
|
# php的gd支持,如果不需要gd则去掉--enable-gd和下面的依赖
|
||||||
apk add libpng-dev libpng-static
|
apk add libpng-dev libpng-static
|
||||||
|
# curl的c-ares支持,如果不需要curl则去掉
|
||||||
|
apk add c-ares-static c-ares-dev
|
||||||
|
|
||||||
downloadAll && \
|
|
||||||
compileLiblzma && \
|
download_all && \
|
||||||
compileLibxml2 && \
|
compile_liblzma && \
|
||||||
compileCurl && \
|
compile_libxml2 && \
|
||||||
compilePHPWithSwoole && \
|
compile_curl && \
|
||||||
|
compile_php && \
|
||||||
echo "完成!见 php-dist/bin/php"
|
echo "完成!见 php-dist/bin/php"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user