2010-12-19 138 views
0

我的地方是一個域可用性檢查,它連接到一個API並從$ tmp輸出「Available:and Unavailable:」。下面的代碼將只檢查可用性ONCE。幫助修復php/api/curl代碼請

我想檢查域的多次的可用性,而不必運行重啓捲曲連接每次(因爲它浪費時間 - 300毫秒到每個查詢1S)(可能在一個循環?)

我只是不知道如何連接到cURL一次並運行循環(通過API進行檢查)。幫助調整代碼將非常感謝!最小化輸出「可用/不可用」和循環檢查所花費的時間是關鍵。

謝謝。

當前代碼

<?php 

    function GetCurlPage ($pageSpec) 
    { 
     $ch = curl_init($pageSpec); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
     $tmp = curl_exec ($ch); 
     curl_close ($ch); 
     $tmp = preg_replace('/(?s)<meta http-equiv="Expires"[^>]*>/i', '', $tmp); 
     $tmp = explode('<br>', $tmp); 
     echo $tmp[0]; 
     echo "<br>"; 
     echo $tmp[1]; 
     echo "<br>"; 
     return $tmp; 
    } 

$returnUrl = "http://www.mysite.com.au/check.php"; 
$url = "https://www.apisite.com.au/availability/check.php?domain=testdomain&suffixes=.com.au"; 
$output = GetCurlPage("$url"); 

?> 

@Marc乙

function getCurlPage($pageSpec) { 
if (is_null($ch)) { 
    $ch = curl_init($pageSpec); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
} else { 
    curl_setopt($ch, CURLOPT_URL, $pageSpec); 
} 
    while ($i < 5) { 
    $tmp = curl_exec ($ch); 
    //curl_close ($ch); 
    $tmp = preg_replace('/(?s)<meta http-equiv="Expires"[^>]*>/i', '', $tmp); 
    $tmp = explode('<br>', $tmp); 
    echo $tmp[0]; 
    echo "<br>"; 
    echo $tmp[1]; 
    echo "<br>"; 
    echo udate('H:i:s:u'); 
    echo "<br><br>"; 
    $i++; 
    } 
     return $tmp; 
} 
+0

如果你暗示持續的http連接,你必須堅持你已有的東西。 'cURL'不是爲了這樣工作而設計的。 – 2010-12-19 15:44:47

+0

@goreSplatter - 它可能會循環$ tmp = curl_exec($ ch);使$ tmp成爲一個數組,例如:$ tmp(i)並在每個循環中遞增?在每個循環,輸出..會執行可用性檢查和輸出,或者是不可能跳過執行卷曲每個單一的可用性檢查? – iCeR 2010-12-19 15:48:06

+0

有沒有另一種使用http-post來實現我想要的方式? – iCeR 2010-12-19 15:49:48

回答

0

這應該回答你的問題:Persistent/keepalive HTTP with the PHP Curl library?

評論隨訪:

function getCurlPage($pageSpec) { 
    if (is_null($ch)) 
     static $ch = curl_init($pageSpec); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    } else { 
     curl_setopt($ch, CURLOPT_URL, $pageSpec); 
    } 
    $tmp = curl_exec($ch); 
    ... do NOT close the curl handle, otherwise do the rest the same as before ... 
} 

大概不會像現在這樣工作,這樣做會讓我頭腦發昏,只有2個小時的睡眠時間,但這應該足以讓您開始。

順便說一句,沒有必要爲GetCurlPage("$url")做雙引號,這會浪費解析器時間,因爲PHP將不得不創建一個新的空字符串,填入$url,並將新字符串向下傳遞。只要做GetCurlPage($url)

+0

@Marc B - 謝謝!請原諒我缺乏cURL知識,但是如何在設置循環檢查的同時通過上面的代碼實現該功能?對不起,這個討厭。 – iCeR 2010-12-19 15:58:53

+0

如果你讓捲曲手柄超出範圍,它將被PHP清理。在函數外部創建curl句柄並將其作爲參數傳遞,或者將其存儲在函數內部的靜態變量中。無論哪種方式,不要每次都創建一個新的句柄。只需在第二個和後續請求中重複使用它。您只需每次更改網址即可。 – 2010-12-19 16:00:35

+0

好我的理解是創造這種 「curl_setopt($ curlHandle,CURLOPT_HTTPHEADER,陣列( '連接:保持活動', '保持活動:300' )); 」 的GetCurlPage功能之外的..休息是有點混亂。您是否有一段時間用備註標記我的代碼,以便插入所需的代碼?對不起.. – iCeR 2010-12-19 16:05:03