PHP 如果没有可用的 IPv6 DNS 条目,MAMP fsockopen 将失败

PHP MAMP fsockopen fails if no IPv6 DNS entry is available

我对 MAMP 和所有试图连接到外部源的函数有一个非常恼人的问题。

我的应用程序中有一个非常简单的 fsockopen。

$fp = fsockopen($this->port == 443 ? 'ssl://' . $this->host : $this->host, $this->port, $errno, $errstr, 20);

这是合作伙伴提供的库。在最后一次 MAMP 或 OSX 更新之前一切正常,我不确定。

该行产生以下错误:

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known

我已经阅读了很多有关该错误的信息,如果名称未解析,则会出现该错误。所以我做了一些其他检查,问题似乎是 ipv6 分辨率。该站点没有 IPv6 DNS 条目,但连接尝试使用 IPv6,但出现错误,连接已关闭。

如果我在命令行上尝试同样的操作:

ping6: getaddrinfo -- nodename nor servname provided, or not known

我得到同样的错误。那么,如果名称不可用,为什么 PHP 不回退到 IPv4?

禁用 IPv6 无效。将 v4 地址添加到我的主机文件没有任何影响。

好的,这个问题是由 OSX 的测试版引起的。我重新安装了 OSX 12.3,运行良好。