2012-09-06 65 views
2

我的一個CLI腳本通過FTP下載文件。PHP - 驗證FTP連接 - 檢測FTP超時

腳本打開FTP連接,登錄,下載需要的文件,並進入休眠狀態。每隔一段時間它再次檢查文件。作爲一個守護進程,這個腳本預計將持續好幾天。

我希望能夠重新使用的開放式連接(這樣我就不必每次循環重新連接)。

$ftpconn = false; 
$ftplogin = false; 

while(1){ 

sleep(25); 
if(!$ftpconn){ 
    $ftpconn = ftp_connect(HOST); 
} 
if(!$ftplogin){ 
    $ftplogin = ftp_login($ftpconn, USER, PASS); 
} 

// Do FTP stuff here 

} 

我的問題是這樣的。請問ftp_connectftp_login超時?如果是這樣,當發生這種情況時,$ftpconn$ftplogin會變爲FALSE嗎?

謝謝。

+0

睡25秒?我認爲您足以讓您檢查文件,以便您的連接能夠保持活躍狀態​​。 .. –

+0

@Mihai Iorga的睡眠可能是10秒,可能是300秒。該腳本必須運行幾天而不重新啓動。我想確保我不會被封閉的連接卡住,不會重新打開。但我也不想保持打開新的連接,當我不必。 – nick

+0

我們假設睡眠時間比連接保持活動的時間長。或者無論出於何種原因都認爲它已經破裂那麼我將如何知道連接需要重新打開?我不能假設它會保持活力 – nick

回答

1

你最好的選擇上,這是實現你的連接過程。然後建立您的邏輯以嘗試檢查文件。 (我假設使用類似ftp_nlist的東西)。出於任何原因,如果出現錯誤,ftp_nlist將返回FALSE。在這一點上,您可以使用ftp_close關閉現有連接(如果連接因任何原因已關閉,則會給出FALSE),然後再次運行連接序列。

你會想在邏輯上建立,如果ftp_nlist失敗超過幾次,退出你的應用程序了。不幸的是,各種ftp_ *命令在識別函數失敗的原因方面沒有太多深度,所以您將不得不圍繞它來構建額外的邏輯來進行補償。

+0

我的ftp_nlist總是檢查相同的目錄。如果它失敗了,它可能是互聯網的丟失或者關閉連接。所以這是我已經考慮過的方法。我只是想知道是否有其他方法。 – nick