0

こんにちは、リモート ファイルのダウンロードで奇妙な問題が発生しています。Flurry Data API を使用してレポートをダウンロードしています。Flurry API を初めて呼び出すと、ダウンロードするレポートのパスを含む XML/JSON 応答が返されます。レポートの準備には 2 分ほどかかります。私はそのことで問題を抱えています。レポートのリンクを直接関数に貼り付けるだけで、リモートファイルをダウンロードするスクリプトを作成しました。これは、既にダウンロードする準備ができています。それは魅力のように機能しますが、ダウンロードのプロセスを自動化する必要があります。そのために、まず API を呼び出し、レポートのダウンロード リンクを取得してから使用しますsleep()3分ほど実行を停止するPHPの機能(2でも試しました)。次に、レポートを正常にダウンロードするために使用する同じ関数を呼び出しますが、今回は機能しません。ファイルのダウンロード方法は次のとおりです。

function get_file_and_save($file, $local_path, $newfilename) {
    $err_msg = '';        
    $out = fopen($local_path . $newfilename . ".gz", 'wb');
    if ($out == FALSE) {
        print "File is not available<br>";
        exit;
    }

    $ch = curl_init();
    $headers = array('Content-type: application/x-gzip', 'Connection: Close');
    curl_setopt($ch, CURLOPT_FILE, $out);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_URL, $file);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0);
    curl_exec($ch);

    echo "<br>Error Occured:" . curl_error($ch);

    curl_close($ch);
}

私も与えようとしましたCURLOPT_TIMEOUTが、どちらも機能していませんでした。

Flurry にリクエストするコードdownload_pathは、正常に機能しており、レポート リンクを取得するだけです。

$query_url = 'http://api.flurry.com/rawData/Events?apiAccessCode=' . $ACCESS_CODE . '&apiKey=' . $API_KEY . '&startTime=' . $start_time . '&endTime=' . $end_time;    

    $response = download_path($query_url);

    if ($response) {
        $response_obj = json_decode($response, true);

        if (isset($response_obj['report']['@reportUri'])) {
            $report_link = $response_obj['report']['@reportUri'];
        }

        if (isset($response_obj['report']['@reportId'])) {
            $report_id = $response_obj['report']['@reportId'];
        }

        if(isset($report_link) && !empty($report_link)){        
                echo "<br >Report Link: ".$report_link."<br >";
                sleep(240); 

                $config = array(
                    'http' => array(
                        'header' => 'Accept: application/json',
                        'method' => 'GET'
                    )
                );
                $stream = stream_context_create($config);
                $json= file_get_contents($report_link,false,$stream);
                echo "<pre>";
                print_r($http_response_header);
                echo "</pre>";    

                if($http_response_header[3] == "Content-Type: application/octet-stream"){
                    get_file_and_save($report_link, "data-files/gz/", $current_time); 
                }
            }
            else{        
                echo "There was some error in downloading report";
            }        

    } else {

        $error = true;
        echo "There was some error in genrating report";
    }

何か問題がありますか、sleep()または私が立ち往生しているのは2泊目であり、それを達成できません。

4

1 に答える 1