0

PHP curl 使用 getaddrinfo() 将主机名解析为 IP 地址。通过设置一个选项,它可以很容易地查找 IPV4 地址,但是当我们启动 IPv6 并在我们的网络上正常运行时,这将需要相当多的工作并且很难撤消。

有没有办法将 getaddrinfo() 设置为默认为我们整个 Ubuntu 服务器的 IPv4 查找?

谢谢韦恩

4

2 回答 2

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 启动并运行时,更改函数的内部“默认值”。

于 2012-12-11T10:04:49.683 回答
1

在 Linux 上,getaddrinfo()可以使用/etc/gai.conf. 您不能使用此文件来防止返回 IPv6 地址,但可以使用它来确定 IPv4 地址的优先级高于 IPv6 地址。

但实际上,您只是希望 PHP/Curl 将AI_ADDRCONFIG标志传递给getaddrinfo(),这将导致它仅在机器当前配置了 IPv6 地址时才返回 IPv6 地址。

于 2012-12-11T13:14:34.037 回答