phpEnv 无法解析域名的根本原因是 Windows 系统 DNS 配置错误,而非 Nginx 或 PHP 配置问题;应优先修改网络适配器的 DNS(如设为 223.5.5.5/114.114.114)或 hosts 文件,无需改动 nginx.conf。

phpEnv 本身不提供 DNS 配置能力,它只是一个 Windows 下的 PHP 环境集成包(含 Nginx、PHP、MySQL),其域名解析完全依赖宿主操作系统(Windows)的 DNS 设置。Nginx 在 Windows 上不直连 DNS 服务器,所有 curl、fopen("http://...")、file_get_contents() 等涉及域名的操作,最终都走 Windows 的 getaddrinfo() 系统调用 —— 也就是系统级 DNS 配置。
所以,“phpEnv 配置 DNS” 是个伪命题。真正要改的是 Windows 的网络适配器 DNS,或本地 hosts 文件。
为什么 Nginx 在 phpEnv 里无法解析域名?
常见现象:file_get_contents("https://api.example.com") 报错 failed to open stream: Name or service not known,或 curl_init() 后 curl_exec() 返回 false 且 curl_error() 显示 Could not resolve host。
根本原因不是 Nginx 配置问题,而是 Windows 没法把域名转成 IP。可能情况包括:
- 当前网络连接未设置 DNS(比如仅设了 IP,没填 DNS 服务器)
- DNS 服务器不可达(如公司内网 DNS 被禁用,又没 fallback 到公共 DNS)
- 防火墙/安全软件拦截了 UDP 53 端口出向请求
- 本地
hosts文件写了错误的映射,且优先级高于 DNS 查询
修改 Windows 网络适配器 DNS(最常用有效)
这是绝大多数 phpEnv 用户应优先尝试的方法,生效范围覆盖所有 PHP 进程及 Nginx 子进程发起的域名请求。
- 按
Win + R,输入ncpa.cpl回车,打开“网络连接” - 右键当前启用的连接(如“以太网”或“WLAN”)→ “属性” → 双击“Internet 协议版本 4 (TCP/IPv4)”
- 勾选“使用下面的 DNS 服务器地址”,填入:
首选 DNS 服务器:223.5.5.5 备用 DNS 服务器:114.114.114.114
这两者是阿里云和 CNNIC 的公共 DNS,国内访问稳定、无污染。填完点“确定”,无需重启 phpEnv。
立即学习“PHP免费学习笔记(深入)”;
验证方式:在 CMD 中执行 nslookup www.bt.cn,若返回 IP 且无超时,说明系统 DNS 已通。
临时绕过 DNS:改 hosts 文件(适合开发调试)
当只对个别域名做解析(比如本地开发 test.local),且不想动系统 DNS 时,直接编辑 C:\Windows\System32\drivers\etc\hosts(需管理员权限):
- 用记事本(以管理员身份运行)打开该文件
- 末尾追加一行:
127.0.0.1 test.local - 保存后,在 PHP 中调用
file_get_contents("http://test.local")就能命中本地 Nginx
注意:hosts 不支持通配符(如 *.test.local),也不走 DNS 协议,纯静态映射;修改后无需重启服务,但部分程序(如 Chrome)可能缓存 DNS 结果,可强制刷新:在地址栏输入 chrome://net-internals/#dns → 点“Clear host cache”。
phpEnv 自带的 Nginx 不需要也**不能**配置 DNS
nginx.conf 里没有 resolver 或类似 DNS 设置项——因为 Nginx 在反向代理场景(如 proxy_pass http://upstream)才需显式指定 resolver,而 phpEnv 默认是直接处理 PHP-FPM 请求,并不主动向外发 HTTP 请求。如果你在 PHP 代码里用了 curl 或 file_get_contents,那解析行为发生在 PHP 层,与 Nginx 配置无关。
唯一例外是启用了 fastcgi_cache_use_stale 或某些高级模块(如 ngx_http_upstream_check_module),但 phpEnv 默认不含这些。别往 nginx.conf 里硬加 resolver 223.5.5.5,它不会起作用,还可能引发启动失败。
nslookup,就急着跑 PHP 脚本,结果把问题归咎于环境配置错误。



















