【已解决】自己编译的sfx文件二进制打包,打包后运行提示Only run in command line

xiaopi

问题描述

由于需要使用apcu扩展,所以自己编译了一份php8.1静态文件,一次编译了php8.1-static和micro.sfx两个文件。 php8.1-static用于开发环境并未出现任何问题,但是将自己的micro.sfx拷贝到build/目录下打包二进制后,二进制文件不能执行,提示"only run in command line mode"。怀疑是编译的时候少东西
编译语句为:

$ ./spc-linux-x86_64 build --build-cli --build-micro "bcmath,apcu,calendar,ctype,curl,dom,event,exif,ffi,fileinfo,filter,gd,iconv,inotify,mbstring,mongodb,mysqlnd,openssl,pcntl,pdo,pdo_mysql,pdo_sqlite,phar,posix,readline,redis,session,shmop,simplexml,soap,sockets,sqlite3,tokenizer,xml,xmlreader,zip,zlib,xmlwriter" --debug -I "memory_limit=512M"

编译步骤:https://www.workerman.net/a/1605

解决方案一:更新workerman至v4.1.14版本,其中兼容了PHP_SAPI为micro的方式(感谢老大@ walkor立马更新了这个版本)

解决方案二:编译的时候增加参数--with-micro-fake-cli,编译以后PHP_SAPI的值依旧是cli (感谢@crazywhalecc原作者提供的帮助)

284 1 0
1个回答

walkor

升级下workerman

  • xiaopi 2023-12-19

    workerman已经是最新版本v4.1.13 需要升级到v5么?

  • walkor 2023-12-19

    你手动改下源码,判断去掉就好了

  • xiaopi 2023-12-19

    啊? 这样感觉不太好维护,请问官网维护的php8.1静态文件和php8.1.micro.sfx都是咋编译的,加了哪些参数,我用官网的就没有问题。 我自己编译的可能还会造成其他不可预料的问题

  • walkor 2023-12-19

    sfx 编译的时候好像也有选项设置

  • xiaopi 2023-12-19

    我找了crazywhalecc/static-php-cli项目说明,没找到怎么选项,咱们workerman维护的sfx加了啥

  • walkor 2023-12-19

    印象中没加东西

  • xiaopi 2023-12-19

    那就麻烦了,我就是想加个apcu扩展和修改下memory_limit的值,就等着发布了。麻烦老大给看看咋解决

  • walkor 2023-12-19

    发了 4.1.14版,你升级下workerman

  • xiaopi 2023-12-19

    感谢,不过现在还没看到4.1.14版哈

  • xiaopi 2023-12-19

    我分别使用两个sfx打印了PHP_SAPI的值,发现我自己的sfx是micro,workerman官网编译的sfx值是cli。 虽然不明白官网怎么做到的,但是workerman兼容一下应该也行。不过老大难道改了crazywhalecc/static-php-cli源码再编译的么

  • walkor 2023-12-19

    我不记得了

  • xiaopi 2023-12-19

    感谢老大,那我等4.1.14上线以后再更新一下哈

  • walkor 2023-12-19

    4.1.14 好了

  • xiaopi 2023-12-19

    老大效率太高了

  • walkor 2023-12-19

    手速贼快

  • xiaopi 2023-12-19

    666

🔝