2

私のウェブサイト (PHP - CodeIgniter アプリケーション) をホストするように構成された Digitalocean LEMP アプリケーション ドロップレットがあり、アプリケーションで 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 ライブラリを使用しています)。

私は頭に浮かぶすべてを試しましたが、今ではアイデアが不足しているので、すべての助けに感謝します. 私が見逃しているnginxでcURLを接続/動作させるために特別な設定/やるべきことはありますか? 多分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 に答える