2011-08-22 2 views
0

전 세계 기상 온라인에서 위도 경도에 따라 파도 높이, 파도 지속 시간 및 수온을 검색하는 PHP 스크립트를 실행하고 있습니다. 그러나 제 호스트는 10 초의 스크립트 실행만을 허용합니다. 내 호스트의 php_ini에 액세스 할 수 없기 때문에 커뮤니티에서 스크립트를 최적화하는 데 아이디어/조언을주기 위해 문제를 일으킬 수 있는지 궁금합니다. 이 스크립트는 35 개의 레코드 만 업데이트합니다. 총 100 개의 레코드가 있습니다. 저는 세계 날씨 API에서 많은 데이터를 던지고 있다고 생각합니다. 최적화하기 전에RSS 피드를 검색하는 PHP 스크립트, 시간 초과 문제

$connection=mysql_connect('myhost', 'user', 'post'); 
if (!$connection) { die('Not connected : ' . mysql_error());} 


$db_selected = mysql_select_db('ilovebigbutts', $connection); 
if (!$db_selected) { 
die ('Can\'t use db : ' . mysql_error()); 
} 

// Here I am selecting the lat long and pri_id from table 
$query = "SELECT * FROM beaches"; 
$result = mysql_query($query); 
if (!$result) { 
die("Invalid query: " . mysql_error()); 
} 

while ($row = @mysql_fetch_assoc($result)) { 
$id = $row["pri_id"]; 
$lat = $row["lat"]; 
$lng = $row["lng"]; 

$feed_url = "http://free.worldweatheronline.com/feed/marine.ashx? key=xxxxxxxxxxxx&q=".$lat.",".$lng."&format=xml"; 
$xmlString = file_get_contents($feed_url); 
$xml = new SimpleXMLElement($xmlString); 
$items = $xml->xpath('weather/hourly'); 
$closeItems = array(); 
$new_array = array(); 
foreach($items as &$item) 
{ 
$waves = $item->swellHeight_m; 
$wave_secs = $item->swellPeriod_secs; 
$water_temp = $item->waterTemp_F; 
$query1 = "UPDATE beaches SET waves = '$waves', wave_secs = '$wave_secs', water_temp = '$water_temp' WHERE pri_id = '$id' LIMIT 1"; 
    $update_result = mysql_query($query1); 
    if (!$update_result) { 
    die("Invalid query: " . mysql_error()); 
    } 
} 

}

+1

진짜 hoster를 얻을. 10 초의 실행 시간으로 HTTP를 통한 네트워크 서비스를 처리해야합니다. 진짜 주인을 사귀어 라. cron을 지원하는 것으로 가져 가십시오. – hakre

답변

0

나는 이것이> 10 초를 복용하는 것에 놀랐습니다. pri_id에 대한 색인이 있습니까? 그렇게하면 원래 선택 쿼리에 제한을 두어 청크로 처리 할 수 ​​있습니다.

+0

안녕하세요, 답장을 주셔서 감사합니다, 예 pri_id 열에는 색인이 있습니다. –

+0

나는 당신이 그 질문을 깨뜨릴 것이라고 생각한다. 사이트에서 응답을 얻으려면 91 밀리 초가 걸리므로 100 회의 요청은 9.1 초이며 제한 시간에 충분히 근접합니다. API에서 응답을 가져 오는 것이 너무 느린 경우 코드 최적화가 더 이상 필요하지 않습니다. 빠른 둘러보기가 있었지만 장거리/위도 검색을 결합 할 수있는 것처럼 보이지는 않았지만 매우 빠른 모양이었습니다! –

+0

다시 한 번 감사드립니다. 오늘은 당신의 도움에 감사 드리며, 문제에 대한 신선한 시각을 갖고있는 것이 좋습니다. –

0

, 당신이 경우

<?php 
set_time_limit(60); // 1min execution 

작품을 확인 않았다 : 여기

내 스크립트입니다?

+0

예, 나는 이것을 포함하지 않았습니다, 미안합니다 : set_time_limit (25); –