何年もうまく機能している Telegram ボットがいくつかあります。Bot API にリクエストを送信するには、次の 2 つの方法を使用しました。
1 つ目は次のとおりです。
file_get_contents($url);
2 つ目は次のとおりです。
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 60
]);
curl_exec($ch);
数日前、私は次のことに気付きました。
file_get_contents()
毎回完全に戻るのをやめましfailed to open stream: Connection timed out
たが、他のウェブサイトへのリクエストにはうまく機能します。- cURL は引き続き機能しますが、非常に遅いです。ボットにメッセージを送信した後、応答を受け取るまで 5 ~ 8 秒待ちます。1秒程度に短縮された待機時間に変更
CURLOPT_CONNECTTIMEOUT
したとき。1
file_get_contents()
これで以前と同じように動作し始めましたcontext
:
file_get_contents($url, false, stream_context_create([
'socket' => [
'bindto' => '0:0'
]
]));
はlast_error_message
常にRead timeout expired
です。サーバーの再起動は役に立ちません。ブラウザーから Bot API への直接要求は完全に機能します。
何が起こっていて、それを修正する方法は?