2

我已将 Digitalocean LEMP 应用程序 dropplet 配置为托管我的网站(PHP - CodeIgniter 应用程序),我在我的应用程序中使用 Nexmo SMS API,直到今天一切正常。突然,现在当我尝试发送 SMS 时出现此错误“无法解析主机: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;
}

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

我尝试了所有出现在我脑海中的东西,但现在我的想法已经不多了,所以每一个帮助都值得赞赏。是否有任何特殊设置/要做的事情来连接/使 cURL 与我缺少的 nginx 一起工作?也许在 nginx.conf 文件中,或者我需要打开一些端口等?

4

1 回答 1

1

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

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

如果它可以解析主机,这应该返回主体。

于 2015-03-13T00:41:49.967 回答