未定义常量 GLOB_BRACE 的使用 in docker Alpine Linux
Closed this issue · 6 comments
未定义常量 GLOB_BRACE 的使用 in docker Alpine Linux
<?php
var_dump(GLOB_BRACE);
PHP Fatal error: Uncaught Error: Undefined constant "GLOB_BRACE" in /root/1.php:3
Stack trace:
#0 {main}
thrown in /root/1.php on line 3
php glob函数参数, 如果可以,不用Alpine Linux 作为 linux build镜像
@netyum 看这里 https://www.php.net/manual/zh/function.glob.php 官网提供的信息: 注意: GLOB_BRACE 在一些非 GNU 系统上无效,比如 Solaris 和 Alpine Linux 。
你可以自己用 debian 构建 :
https://github.com/swoole/swoole-cli/tree/main/sapi/quickstart/linux 选择 run-debian-11-container.sh
问题所在: 其实是libc 的实现问题 (musl libc 和 glibc );
核心关键点: musl-libc 是硬性要求;
你是说硬性指标只有musl-libc才能过静态编译?
@netyum
你可以用glibc 编译几次就知道了。
glibc 可以静态编译,但是编译结果拷贝到 非 GNU 系统下就用不了。
比如 x86_64架构下debian里下,用glibc 静态编译出来的php 解释器,拷贝到alpine 系统下,用不了
你可以尝试下:
你在debian 或者 ubuntu 系统下: 把这个 改成 protected string $cCompiler = 'clang'; 换成gcc ,编译出来, GLOB_BRACE
未定义的问题,应该就解决了。
要使用libc
debian 系统下编译器组合:
cc=musl-gcc
cxx=gcc
或者:
cc=clang
cxx=clang++
alpine: 系统下编译器组合: (alpine 默认使用musl-gcc 替代gcc)
cc=gcc
cxx=g++
或者
cc=clang
cxx=clang++
好的我试试,最终还是要依赖glibc