Files
frankenphp/docs/cn/known-issues.md
Pierre 2c6e201ea6 docs: Chinese translation (#597)
* docs: translated in Chinese

* fix: readme md links and duplicate images

* docs: lint and remove outdated parts

---------

Co-authored-by: Pierre Clavequin <pierre.clavequin@valueapex.com>
Co-authored-by: ginifizz <laury@les-tilleuls.coop>
Co-authored-by: Kévin Dunglas <kevin@dunglas.fr>
2024-02-28 15:29:20 +01:00

4.0 KiB
Raw Blame History

已知问题

Fibers

众所周知,调用本身在 Fibers 中调用 cgo 的 PHP 函数和语言结构会导致崩溃。

这个问题正在由 Go 项目处理

同时,一种解决方案是不要使用从 Fibers 内部委托给 Go 的构造(如 echo)和函数(如 header())。

此代码可能会崩溃,因为它在 Fiber 中使用了 echo

$fiber = new Fiber(function() {
    echo 'In the Fiber'.PHP_EOL;
    echo 'Still inside'.PHP_EOL;
});
$fiber->start();

相反,请从 Fiber 返回值并在外部使用它:

$fiber = new Fiber(function() {
    Fiber::suspend('In the Fiber'.PHP_EOL));
    Fiber::suspend('Still inside'.PHP_EOL));
});
echo $fiber->start();
echo $fiber->resume();
$fiber->resume();

不支持的 PHP 扩展

已知以下扩展与 FrankenPHP 不兼容:

名称 原因 选择
imap 非线程安全 javanile/php-imap2, webklex/php-imap

get_browser

get_browser() 函数在一段时间后似乎表现不佳。解决方法是缓存(例如使用 APCU)每个用户代理的结果,因为它们是静态的。

独立的二进制和基于 Alpine 的 Docker 镜像

独立的二进制文件和基于 Alpine 的 docker 镜像 (dunglas/frankenphp:*-alpine) 使用 musl libc 而不是 glibc and friends以保持较小的二进制大小。这可能会导致一些兼容性问题。特别是glob 标志 GLOB_BRACE 不可用

在 Docker 中使用 https://127.0.0.1

默认情况下FrankenPHP 会为 localhost 生成一个 TLS 证书。 这是本地开发最简单且推荐的选项。

如果确实想使用 127.0.0.1 作为主机,可以通过将服务器名称设置为 127.0.0.1 来配置它以为其生成证书。

不幸的是,这在使用 Docker 时是不够的,因为 它的网络系统. 您将收到类似于以下内容的 TLS 错误 curl: (35) LibreSSL/3.3.6: error:1404B438:SSL routines:ST_CONNECT:tlsv1 alert internal error.

如果您使用的是 Linux解决方案是使用 主机网络驱动程序:

docker run \
    -e SERVER_NAME="127.0.0.1" \
    -v $PWD:/app/public \
    --network host \
    dunglas/frankenphp

Mac 和 Windows 不支持主机网络驱动程序。在这些平台上,您必须猜测容器的 IP 地址并将其包含在服务器名称中。

运行 docker network inspect bridge 并查看 Containers 键,以识别 IPv4Address 键下当前分配的最后一个 IP 地址,并将其递增 1。如果没有容器正在运行则第一个分配的 IP 地址通常为 172.17.0.2

然后,将其包含在 SERVER_NAME 环境变量中:

docker run \
    -e SERVER_NAME="127.0.0.1, 172.17.0.3" \
    -v $PWD:/app/public \
    -p 80:80 -p 443:443 -p 443:443/udp \
    dunglas/frankenphp

![谨慎]

请务必将 172.17.0.3 替换为将分配给容器的 IP。

您现在应该能够从主机访问 https://127.0.0.1

如果不是这种情况,请在调试模式下启动 FrankenPHP 以尝试找出问题所在:

docker run \
    -e CADDY_GLOBAL_OPTIONS="debug"
    -e SERVER_NAME="127.0.0.1" \
    -v $PWD:/app/public \
    -p 80:80 -p 443:443 -p 443:443/udp \
    dunglas/frankenphp