swoole / swoole-src

🚀 Coroutine-based concurrency library for PHP
https://www.swoole.com
Apache License 2.0
18.25k stars 3.16k forks source link

请求兼容micro运行环境,出现`Swoole\Http\Server can only be used in CLI mode`异常 #5263

Closed etjson closed 2 months ago

etjson commented 2 months ago

请在提交问题之前回答这些问题。

1.你做了什么? 如果可能,请提供一个简单的脚本来重现错误。

使用https://github.com/crazywhalecc/static-php-cli构建二进制执行出现Swoole\Http\Server can only be used in CLI mode异常,php_sapi_name函数输出为micro

  1. 你希望看到什么?

兼容micro运行环境

  1. 你看到了什么?

出现Swoole\Http\Server can only be used in CLI mode异常

  1. 您使用的 Swoole 版本是什么(显示您的 php --ri swoole)?

5.1.2

  1. 您使用的机器环境是什么(显示您的 uname -a & php -v & gcc -v)?

micro

@NathanFreeman @matyhtf

etjson commented 2 months ago

micro环境中还会出现Fatal error: Uncaught Error: Class "Swoole\Constant" not found异常

NathanFreeman commented 2 months ago
if (strcmp("cli", sapi_module.name) == 0 || strcmp("phpdbg", sapi_module.name) == 0 ||
   strcmp("embed", sapi_module.name) == 0) {
   SWOOLE_G(cli) = 1;
}

swoole目前没有加上micro这个,我稍后处理一下,急用的话可以用swoole-cli代替一下

he426100 commented 2 months ago

static-php可以加 --with-micro-fake-cli 伪装 cli 的

jingjingxyk commented 2 months ago

@etjson 按照 @NathanFreeman @he426100 提示 自己改源码试试


if (strcmp("cli", sapi_module.name) == 0 || strcmp("phpdbg", sapi_module.name) == 0 ||
   strcmp("embed", sapi_module.name) == 0 ||  strcmp("micro", sapi_module.name) == 0) {
   SWOOLE_G(cli) = 1;
}

https://github.com/swoole/swoole-src/blob/3eab0317bc2a9c9cc1b1af1b5cd9c269b705a0e6/ext-src/php_swoole.cc#L697