2013-12-15 176 views
-2

我正在使用simplexml通過while循環從另一個提供程序加載數據。爲了避免被防火牆阻擋或淹沒他們的服務器,我想在500次請求後通過睡眠延遲一小段時間。這是我現有的代碼...請求數量之間的延遲

while (!feof($file_handle)) { 
    $line_of_text = fgetcsv($file_handle, 1024); 

    // Load the XML 
    $url = "http://www.domain.com/models.asp?txtYear=" . $line_of_text[0] . "&txtMake=" . $line_of_text[1]; 
    $xmlinfo = simplexml_load_file($url); 

    $i = 0; 
    $value = (string) $xmlinfo->table[$i]->txtmodel; 

    while ($value != '') { 
     $value = (string) $xmlinfo->table[$i]->txtmodel; 
     if ($value != '') { 
      fputcsv($handle, array(
       $line_of_text[0], 
       $line_of_text[1], 
       $value 
      )); 
     } else { 
      // Do nothing 
     } 
     $i++; 
    } 
} 

我希望這很容易做 - 我期待着援助! :-)

回答

0

計數循環的每一個實例,以及它達到了500,把它進入休眠,然後重新啓動它:

$meter = 0; 
while (!feof($file_handle)) { 
    $line_of_text = fgetcsv($file_handle, 1024); 
    // Load the XML 
    $url = "http://www.domain.com/models.asp?txtYear=" . $line_of_text[0] . "&txtMake=" . $line_of_text[1]; 
    $xmlinfo = simplexml_load_file($url); 

    $i = 0; 
    $value = (string) $xmlinfo->table[$i]->txtmodel; 

    while ($value != '') { 
     $value = (string) $xmlinfo->table[$i]->txtmodel; 
     if ($value != '') { 
      fputcsv($handle, array(
       $line_of_text[0], 
       $line_of_text[1], 
       $value 
      )); 
     } else { 
      // Do nothing 
     } 
     $i++; 
    } 
    //Increase the meter by 1 
    $meter++; 
    //Check if the limit is reached and if yes, sleep for 60 seconds 
    if($meter == 500){ 
    sleep(60); 
    $meter = 0; 
    } 
} 
+0

謝謝主席先生。 - 我會在5分鐘內接受。 :-) –