hyperf / hyperf

🚀 A coroutine framework that focuses on hyperspeed and flexibility. Building microservice or middleware with ease.
https://www.hyperf.io
MIT License
6.19k stars 1.21k forks source link

[BUG] 使用 phpmicro+swoole 与 hyperf.phar 打包二进制运行时运行出现报错 #7078

Open crazywhalecc opened 2 weeks ago

crazywhalecc commented 2 weeks ago

Execute the command and paste the result below.

Command: uname -a && php -v && composer info | grep hyperf && php --ri swoole

OS: Debian 12 (amd64) PHP: 8.3.11 Swoole: 5.1.4 Hyperf: Latest from composer (2024-09-19)

# Initialize hyperf.phar
composer create-project hyperf/hyperf-skeleton
composer require hyperf/phar
php bin/hyperf.php phar:build --name=your_project.phar

# Using static-php-cli, get micro.sfx
cd /path/to/static-php-cli
bin/spc build swoole,phar,tokenizer,zlib,openssl,zip,pcntl,zstd,mbstring,mbregex,filter,iconv,pdo,pdo_mysql,pdo_sqlite,posix --build-cli --debug --build-micro --with-micro-fake-cli

# Combine, create binary
bin/spc micro:combine your_project.phar

# Run, get error
./my-app start

Description:

见 Issue https://github.com/crazywhalecc/static-php-cli/issues/479 https://github.com/crazywhalecc/static-php-cli/issues/477

这个问题只能在 Swoole 驱动上复现,初步怀疑可能是 Swoole 对 Phar 加载时与 micro 的 Hook 产生冲突的问题,但我自己基于 Swoole 的炸毛框架在打包 phar 后运行没有此问题,直接使用 Swoole 官网的最小 Demo + box + 随便依赖一个外部的包,打包一个最基础的 phar 也没有问题。

对于 static-php-cli 构建的 micro.sfx,无多余 patch,和 easysoft/phpmicro 的特性保持一致。

/cc @dixyes

zoujingli commented 6 days ago

好像是 swoole 不支持,具体可以查查,建议直接使用 swoole-cli 打包。

参考这个:

https://github.com/swoole/swoole-cli/tree/main/sapi/samples/sfx