feat(compiler): 添加环境变量支持并优化打包流程

- 在编译器中添加 _ENV 全局变量数组支持
- 更新示例程序以演示环境变量访问功能
- 新增 package.sh 脚本实现自动化打包流程
- 集成 UPX 压缩优化二进制文件大小
- 完善打包脚本中的文件检查和错误处理机制
pull/1/head
韩天峰 4 months ago
parent db3dc030f0
commit 0293b28148
  1. 16
      examples/hello.php
  2. 89
      package.sh
  3. 1
      src/Php/CompilerBase.php

@ -1,14 +1,12 @@
<?php
function main(): int
function main(): void
{
global $a;
$a = 100;
echo "Hello World!";
var_dump(PHP_VERSION);
var_dump(php_uname());
var_dump($_ENV);
var_dump($GLOBALS['a']);
var_dump($a);
var_dump(gettype($_SERVER));
var_dump($_SERVER['argc']);
var_dump($_SERVER['argv']);
return 0;
global $argv;
var_dump($argv);
}

@ -0,0 +1,89 @@
#!/bin/bash
# 打包脚本:创建包含指定文件的 zip 压缩包(先对二进制文件进行 UPX 压缩)
OUTPUT_FILE="swoole_compiler_package.zip"
BINARY_FILE="swoole_compiler"
BACKUP_FILE="${BINARY_FILE}.backup"
# 检查必要文件是否存在
REQUIRED_FILES=(
"$BINARY_FILE"
"composer.json"
"composer.lock"
"README.md"
"LICENSE.md"
"examples/hello.php"
)
echo "检查文件..."
for file in "${REQUIRED_FILES[@]}"; do
if [ ! -e "$file" ]; then
echo "错误: 文件不存在 - $file"
exit 1
fi
done
echo "所有文件检查通过"
# 检查 upx 是否安装
if ! command -v upx &> /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

@ -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;

Loading…
Cancel
Save