2017-06-12 26 views
0
function weatherData($date_array){ 
    $weather_array = []; 
    $url = "http://api.worldweatheronline.com/premium/v1/past-weather.ashx?key=#######&q=frankston&format=json&date="; 
    // Get cURL resource 
    array_pop($date_array); 
foreach($date_array as $value){ 
    $url2 = $url . $value; 
    $curl = curl_init(); 
    // Set some options - we are passing in a useragent too here 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $url2 
    )); 
    // Send the request & save response to $resp 
    $resp = curl_exec($curl); 
    // Close request to clear up some resources 
    curl_close($curl); 
    $data = json_decode($resp); 
    $runningTotal = 0; 
    for ($i=0; $i < 7; $i++) { 
     $hourly_data = $data->data->weather[0]->hourly[$i]->precipMM; 
     $runningTotal += $hourly_data; 
    } 
    if($runningTotal >= 0.7){ 
     array_push($weather_array, 'wet <img class="icon" src="images/icons8-Rain-26.png"/>'); 
    } else{ 
     array_push($weather_array, 'dry <img class="icon" src="images/images.png"/>'); 
    } 

} 
return $weather_array; 

好了,所以我有这个功能,将输出的天气数组或不能确定日期是“湿”或“干”,我的问题是,如果我有,也许120日期,我想这样做将花费超过30秒的页面加载时间导致PHP中的严重错误,所以我需要一些方法将这些同步卷曲请求以某种形式的异步窗体,谢谢!加快我的PHP卷曲的请求,天气功能

p.s.对不起,这种垃圾缩进

回答

0

注意:这不是关于加快请求。采取完全不同的方法,但它肯定会解决您的PHP超时错误。

建议的解决方案
这是一个更广泛的问题。需要大量的技术解释和实施假设。我将尝试列出以下要点:

  1. 不要在页面加载时发出任何cURL请求来获取数据。使用ID加载视图中的所有日期。
  2. 在页面加载时,触发一个javascript/jquery函数。
  3. 该函数依次以ID /数据为参数触发每个日期的ajax调用。
  4. 服务器收到的请求会反过来向第三方服务器发出cURL请求以获取结果。
  5. cURL请求提取所需的结果并将其发送回客户端。
  6. 客户端收到结果作为对ajax调用的响应。
  7. 操纵响应以在视图中显示。
  8. 当收到并处理相应日期的响应时,结果将显示,但它肯定会解决PHP超时错误。
+0

这将是值得尝试完成同样的事情,而不使用第4步。您可以直接请求外部网站,甚至不需要使用您的服务器。 –

+1

@DawidZbiński我同意。这可能是值得的。但是,我猜想,对外部网站进行ajax调用会继承自己的挑战。在这里,我只是试图说明解决当前问题的要点。无论如何,感谢您阅读答案并提供您的建议。 –

+0

@Bhavik_Shah是的,当然。我明白你的意思。我只是说这是值得尝试的,因为它会加快速度并减轻服务器负担。当然,这并不总是可能的,因为它也取决于外部。 –