Php curl使用getaddrinfo()将主机名解析为IP地址。通过设置一个选项,很容易让它查找IPV4地址,但这需要做很多工作,当我们在网络上正常运行并正常运行时,很难撤消。
有没有办法将getaddrinfo()设置为默认为我们整个Ubuntu服务器的IPv4查找?
由于 韦恩
答案 0 :(得分:3)
此解决方案适用于C,不确定php。在调用getaddrinfo时,您传递一个struct addrinfo,提供关于您要查找的内容的“提示”。以下示例
struct addrinfo *res;
struct addrinfo hints;
memset(&hints, 0, sizeof(hints));
hints.ai_family = PF_INET;
hints.ai_flags = AI_PASSIVE;
hints.ai_socktype = SOCK_STREAM;
getaddrinfo("localhost", "80", &hints, &res);
在我的评论中复制,因为它似乎适用于答案:
只需为getaddrinfo创建一个包装函数即可 “默认值”。然后在整个应用程序中使用包装器功能。 当ipv6启动并运行时,更改该功能的内部“默认”。
答案 1 :(得分:1)
在Linux上,可以使用getaddrinfo()
调整/etc/gai.conf
的行为。您不能使用此文件来阻止返回IPv6地址,但您可以使用它来优先处理IPv6地址上的IPv4地址。
实际上,您只是希望PHP / Curl将AI_ADDRCONFIG
标志传递给getaddrinfo()
,这将导致它仅在机器当前配置了IPv6地址时才返回IPv6地址。