2012-04-30 268 views
-2

你好,通過php發送多個http請求

我需要在循環內發送一些HTTP請求來刷新數據庫的幾行。 我採用此代碼做到這一點:

<?php 
    function insertPalineForLine($line, $noprompt, $showLines, $device){ 
    $url2="http://www.miafoto.it/iPhone/inarrivo/php/getStations.php?linea=".$line."&noprompt=".$noprompt; 
    //echo "url2=".$url2."<br>"; 
    $html2 = file_get_html($url2); 
    $position=0; 
    $previousPalette=0; 
    foreach($html2->find('station') as $stations) { 
     foreach($stations->find('palina') as $paletta); 
     foreach($stations->find('name') as $name); 
     $paletta=$paletta->plaintext; 
     $address=$name->plaintext; 
     $piecesPaletta=explode("?", $paletta); 
     $paletta=$piecesPaletta[0]; 
     $url3="http://www.miafoto.it/iPhone/inarrivo/php/insertPaletta.php?previousPalette=$previousPalette&position=$position&address=$address&paletta=$paletta&line=$line"; 
     echo $url3; 
     $html3 = file_get_html($url3); 
     $position++; 
     $previousPalette=$paletta; 
     sleep(2); 
    } 
    echo "fine foreach".$counter; 
    $counter++; 
    $url4="http://www.miafoto.it/iPhone/inarrivo/php/assignNext.php?linea=$line"; 
    $html4 = file_get_html($url4); 
    } 
?> 

然而,即使所有的HTTP請求被髮送,只是6行了超過40的被更新(總是0,1,9,31,32,38的任何https執行者我使用)。如果我手動執行缺少的http命令(例如第3個),它們會定期填充,因此我認爲這些請求之間存在一定的干擾。我怎樣才能在沒有這種問題的情況下連續發送它們?

+1

你完全確定嵌套的'foreach'循環嗎?我相信他們可能是這裏的問題,因爲他們什麼都不做。 – maialithar

+4

17個問題,你沒有接受任何答案? Abismal。 – Flukey

+0

在其他用戶收到一個答案之前,我經常會自己找到答案,而且我沒有關於如何關閉請求的提示。至於那些我沒有找到答案的人,不幸的是,我並沒有多次獲得其他好用戶的接受。最後一個關於xcode編程的問題我不得不作爲一個事件提交給Apple。 –

回答

0

這可能是請求發送太快/太快。

在循環中構建單個SQL語句可能會更好,以便最終生成一個包含所有必需更新的語句,然後將一個執行整個語句的http請求放在一個走。

這可能需要重新處理當前由http請求調用的php文件(以支持執行多個更新的SQL語句),但從長遠來看這可能是值得的。

另一種方法是在每個循環迭代之間插入一個延遲,以便這些請求不會彼此間如此迅速地被觸發,但我不會建議您這樣做,因爲您仍可能受到計時問題的影響。

+0

其實我試圖在循環之間插入睡眠命令,但沒有解決問題。最後,我回到了我嘗試的第一種方法 - 「要求」腳本而不是調用它們 - 我放棄了它,因爲它包含了令人討厭的空行,通過在它們的位置引入一個xml打開和關閉標記來混淆解析器所有這些都被解析器忽略了。不管怎麼說,還是要謝謝你。這個問題由被調用的腳本也被另一個組件單獨調用的事實組成。 –