1

while ループで、curl を使用して someapi を実行しています。APIを実行せず、実行中のAPIをエコーするだけの場合、出力は問題ありません...そのAPIを実行すると、whileループで1000回としましょう..途中で500内部サーバーエラーが発生します。

エラーが発生した場合は、それを無視して続行する必要があります。

これは私のコードです:

while($res = mysqli_fetch_array($allDetail)){
    $resulter = myCurl($res['var1'],$res['var2']);
}

function myCurl($var1,$var2){
            $ch = curl_init('some_api_url_with_var1_var2');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
    $response = curl_exec($ch);
    curl_close($ch);
}

curl を使用するのはこれが初めてで、php も初めてです。APIはtrueまたはjson形式のエラーを返しますが、私はそれを気にしたくありません。APIが実行を続けるだけです

4

1 に答える 1

3

HTTP エラーは次のクラスに分けられます。

  • 2xx は成功メッセージです
  • 3xx はリダイレクト メッセージです。
  • 4xx はクライアント エラー メッセージです。
  • 5xx はサーバー エラー メッセージです。

「500 内部サーバー エラー」は、ヒットしている API のエラーです。あなたはおそらく彼らをあまりにも速く打っていて、彼らはそれを処理できません. API があなたのものである場合は、そこで何が起こっているかをデバッグしてみてください。たとえば、PHP が Fatal Error を発行すると、Apache は自動的に 500 を送信します (メモリ使用量またはタイムアウトが Fatal Errors につながる可能性があります)。他の言語も同様の動作をします。

sleep(1)while ループの各反復でa を試してください。コードの実行速度は遅くなるはずですが、うまくいけば、それは以前にコードを強く叩きすぎていたことを意味します。usleep()秒単位ではなくミリ秒単位でスリープする機能もあります。

カールにはCURLOPT_FAILONERRORオプションがあります。これが true に設定されている場合、エラーは無視されます。リクエストが失敗してもループを続けたい場合に役立ちます。curl_error()関数も便利です。

于 2012-05-16T17:35:40.520 に答える