Php 为什么cURL将无效的IP地址报告为错误?

Php 为什么cURL将无效的IP地址报告为错误?,php,curl,dns,Php,Curl,Dns,我有以下使用cURL的PHP代码: $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,"http://area51.stackexchange.com/users/flair/31.json"); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $a_data = json_decode(curl_exec($ch)); echo curl_error($ch); 然后,当我尝试通过HTTP访问该页面时,出

我有以下使用cURL的PHP代码:

$ch = curl_init();

curl_setopt($ch,CURLOPT_URL,"http://area51.stackexchange.com/users/flair/31.json");
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);

$a_data = json_decode(curl_exec($ch));

echo curl_error($ch);
然后,当我尝试通过HTTP访问该页面时,出现以下错误:

无法连接到0.0.0.31:参数无效

但是,当从命令行运行时,代码工作正常


什么可能导致cURL尝试连接到0.0.0.31,这是AFAIK,甚至不是有效的IP地址?

“什么可能导致cURL尝试连接到0.0.0.31,这是AFAIK,甚至不是有效的IP地址?”

你的域名系统搞砸了。我测试了您的代码,它运行正常。

当您说“从命令行运行时,代码运行正常”,您的意思是您已经使用PHP CLI解释器运行了它吗?如果是这种情况,您可以检查web服务器上的
php-i
phpinfo()
的输出之间是否存在任何明显的不匹配。这可能是一些奇怪的版本不匹配或环境问题,尽管你的猜测和我的一样好


如果您(正如我最初所想)只是在谈论运行
curl
命令,那么您也可以尝试在那里检查版本号或环境变量。

我也遇到了同样的问题

我认为您可能会这样构造url:

$url = "http://area51.stackexchange.com/users/flair/" + 31 + ".json";
由于某种原因,url被转换为0.0.0.31

相反,尝试将字符串浓缩,如下所示:

$url = "http://area51.stackexchange.com/users/flair/" . 31 . ".json";

至少解决了我的问题

我假设您已检查DNS解析是否正常工作。cURL是否可以从命令行正常工作?@Tim:yes。从同一服务器的命令行可以正常工作。Hmm。很奇怪。请参阅下面我的问题/建议。您在哪里测试代码?在工作?也许代理服务器@work拒绝访问未知主机?否则你的dns我猜是错的(可能被黑客攻击了!!)。尝试刷新dns缓存??可能是因为有人错误地将URL中的
/
字符解释为
,从而将URL转换为
0.0.0.31
?两者都以
31
结尾这一事实令人好奇。我以前从未见过这样的事情发生,不过。。。