0

良い一日、

Panoramio.com、flickr.com、worldweatheronline.com などのさまざまな外部 API に対して PHP 経由で複数の cURL リクエストを行う Web サービスがあります。一部のホストの空 (panoramio.com と worldweatheronline.com は、それぞれ失敗したリクエストの合計 6% を持つリーダーの 1 つです)。同じホストへの即時結果要求は、同じ確率で成功または失敗する可能性があります。

それで、何が起こったのか、どのように修正すればよいのかを理解しようとしています。おそらく、システムの更新または新しいPHPバージョンが壊れています...

Ubuntu 12.04.4 LTS、nginx 上の cURL 7.22.0 (php-fpm) を使用する PHP 5.5.16。

cURL オプションは次のとおりです。接続タイムアウト 5 秒、合計タイムアウト 60 秒、SSL 検証ホストとピアの両方が無効、IP 解決は IPv4 に強制されます。失敗したリクエストのデバッグ情報を次に示します。

[url] => http://www.panoramio.com/map/get_panoramas.php?set=public&order=popularity&from=0&to=21&size=medium&minx=82.685329&miny=25.748195&maxx=82.695311&maxy=25.757185
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 0
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 5.004513
    [namelookup_time] => 3.1E-5
    [connect_time] => 0
    [pretransfer_time] => 0
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => -1
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 173.194.71.141
    [certinfo] => Array
        (
        )

    [primary_port] => 80
    [local_ip] => 
    [local_port] => 0
)

または:

(
    [url] => http://api.worldweatheronline.com/free/v1/weather.ashx?key=API_KEY_REMOVED&format=js&q=38.25000,20.60000&num_of_days=7
    [content_type] => 
    [http_code] => 0
    [header_size] => 0
    [request_size] => 158
    [filetime] => -1
    [ssl_verify_result] => 0
    [redirect_count] => 0
    [total_time] => 67.623743
    [namelookup_time] => 2.4E-5
    [connect_time] => 1.15904
    [pretransfer_time] => 1.159041
    [size_upload] => 0
    [size_download] => 0
    [speed_download] => 0
    [speed_upload] => 0
    [download_content_length] => -1
    [upload_content_length] => 0
    [starttransfer_time] => 0
    [redirect_time] => 0
    [redirect_url] => 
    [primary_ip] => 46.37.171.96
    [certinfo] => Array
        (
        )

    [primary_port] => 80
    [local_ip] => IP_REMOVED
    [local_port] => PORT_REMOVED
)

ご覧のとおり、接続プロセスはさまざまな状態で終了しますが、DNS 名は常に正しく解決されます。

この問題をデバッグおよび/または解決する方法についてのアイデアは、どこを掘ればよいかわからないので、本当に感謝しています:/

4

0 に答える 0