无法解析主机 - 无法使用cURL在nginx上使用php

时间:2015-03-12 23:47:35

标签: php codeigniter curl nginx nexmo

我将Digitalocean LEMP应用程序dropplet配置为托管我的网站(PHP - CodeIgniter应用程序),我在我的应用程序中使用Nexmo SMS API,一切运行良好,直到今天。突然,现在当我尝试发送短信时,我有这个错误"无法解析主机:rest.nexmo.com"。看起来cURL不起作用,但当我检查它是否已安装时 - 它是,并且我的phpinfo也显示它。我重新启动了nginx,php5-fpm,在我的代码中尝试了一些不同的curl设置,但总是遇到这个错误。

当我尝试运行这样的简单脚本时:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/');
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HEADERFUNCTION, 'read_header');
curl_setopt($ch, CURLOPT_WRITEFUNCTION, 'read_body');
curl_exec($ch);
if ($error = curl_error($ch)) {
    echo "Error: $error<br />\n";
}
function read_header($ch, $string)
{
    $length = strlen($string);
    echo "Received $length bytes<br />\n";
    return $length;
}

结果仍然是&#34;错误:无法解析主机:www.google.com&#34;所以我认为问题出在cURL而不是我的应用程序代码中(我使用的是NEXMO CodeIgniter库)。

我尝试了一切在脑海中浮现的东西,现在我已经没有想法,所以每一个帮助都会受到赞赏。是否有任何特殊的设置/事情可以连接/使cURL与我缺少的nginx一起使用?也许在nginx.conf文件中有什么东西,还是我需要打开一些端口等?

1 个答案:

答案 0 :(得分:1)

请注意,错误是“无法解析主机”。这不是要卷曲,而是指向系统解析器库。 Curl本身不进行DNS查找,而是使用系统标准方法,通常使用libresolv。如果您使用系统调用跟踪实用程序(如strace),您将看到解析器随后由/etc/nsswitch.conf,/​​etc/host.conf和/etc/resolv.conf控制。你的第一个电话应该在那里。您可以使用标准的PHP文件调用来测试它是系统而不是卷曲,例如:

$web_content = file_get_contents("http://www.google.com/");

如果可以解析主机,则应返回正文。