From 0293b2814837f54bfa9cccf28e5ec7307ae5e5ad Mon Sep 17 00:00:00 2001 From: tianfenghan Date: Thu, 23 Apr 2026 15:36:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(compiler):=20=E6=B7=BB=E5=8A=A0=E7=8E=AF?= =?UTF-8?q?=E5=A2=83=E5=8F=98=E9=87=8F=E6=94=AF=E6=8C=81=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=89=93=E5=8C=85=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在编译器中添加 _ENV 全局变量数组支持 - 更新示例程序以演示环境变量访问功能 - 新增 package.sh 脚本实现自动化打包流程 - 集成 UPX 压缩优化二进制文件大小 - 完善打包脚本中的文件检查和错误处理机制 --- examples/hello.php | 16 ++++---- package.sh | 89 ++++++++++++++++++++++++++++++++++++++++ src/Php/CompilerBase.php | 1 + 3 files changed, 97 insertions(+), 9 deletions(-) create mode 100755 package.sh diff --git a/examples/hello.php b/examples/hello.php index 195ce547..4e117cee 100644 --- a/examples/hello.php +++ b/examples/hello.php @@ -1,14 +1,12 @@ /dev/null; then + echo "错误: 未找到 upx 命令,请先安装 upx" + echo "Ubuntu/Debian: sudo apt-get install upx-ucl" + echo "CentOS/RHEL: sudo yum install upx" + exit 1 +fi + +echo "检测到 upx: $(upx --version | head -n 1)" + +# 备份原始二进制文件 +echo "备份原始二进制文件..." +cp "$BINARY_FILE" "$BACKUP_FILE" + +# 使用 UPX 压缩二进制文件 +echo "使用 UPX 压缩 $BINARY_FILE ..." +upx --best "$BINARY_FILE" + +if [ $? -ne 0 ]; then + echo "✗ UPX 压缩失败!" + # 恢复原始文件 + mv "$BACKUP_FILE" "$BINARY_FILE" + exit 1 +fi + +echo "✓ UPX 压缩完成" +echo " 原始大小: $(du -h "$BACKUP_FILE" | cut -f1)" +echo " 压缩后: $(du -h "$BINARY_FILE" | cut -f1)" +echo " 压缩率: $(echo "scale=2; (1 - $(stat -c%s "$BINARY_FILE") / $(stat -c%s "$BACKUP_FILE")) * 100" | bc)%" + +# 删除旧的压缩包(如果存在) +if [ -f "$OUTPUT_FILE" ]; then + rm "$OUTPUT_FILE" + echo "已删除旧的压缩包" +fi + +# 创建 zip 压缩包 +echo "创建压缩包: $OUTPUT_FILE" +zip "$OUTPUT_FILE" \ + swoole_compiler \ + composer.json \ + composer.lock \ + README.md \ + LICENSE.md \ + examples/hello.php + +PACK_RESULT=$? + +# 恢复原始二进制文件 +echo "恢复原始二进制文件..." +mv "$BACKUP_FILE" "$BINARY_FILE" + +if [ $PACK_RESULT -eq 0 ]; then + echo "✓ 打包成功!" + echo "压缩包大小: $(du -h "$OUTPUT_FILE" | cut -f1)" + echo "包含文件:" + unzip -l "$OUTPUT_FILE" | grep -E "\.php$|compiler$|\.json$|\.md$" +else + echo "✗ 打包失败!" + exit 1 +fi diff --git a/src/Php/CompilerBase.php b/src/Php/CompilerBase.php index 1092a3dc..8437e1d1 100644 --- a/src/Php/CompilerBase.php +++ b/src/Php/CompilerBase.php @@ -236,6 +236,7 @@ class CompilerBase extends \PhpAot\Core\Translator '_FILES' => self::TYPE_ARRAY, '_SESSION' => self::TYPE_ARRAY, '_REQUEST' => self::TYPE_ARRAY, + '_ENV' => self::TYPE_ARRAY, ]; protected array $globalVars = []; protected bool $strictTypes = false;