2011-10-24 76 views
1

我連接到FTP和下載文件。文件名是基於日期的,因此10242011.csv將是腳本今天嘗試下載的文件。有時文件不存在一天。我有以下的代碼,但我仍然收到一個PHP的警告:ftp_fget()返回文件犯規存在的警告......避免警告不改變錯誤報告級別

Warning: ftp_fget() [function.ftp-fget]: 10242011.csv: The system cannot find the file specified. in /home/rick/public_html/cron/main.php on line 68 

下面是代碼:

if (!ftp_fget($conn, $handle, $ftp_file, FTP_ASCII, 0)) { 
    $log[] = array('type' => 'error', 'msg' => 'Unable to download data file (' . $ftp_file . ') from ftp.'); 
    email_fatal_error(); exit(); 
} else {    
    $log[] = array('type' => 'success', 'msg' => 'File downloaded.');    
} 

我知道我可以只把PHP warings的,但我只是想知道「正確」的方式來做到這一點。任何時候當您收到警告時,我都覺得可以解決。

+0

這是*不正確的答案,應儘量避免,但可以使用'@'操作符來抑制任何給定操作的錯誤,例如'if(!@ftp_fget($ conn,$ handle,$ ftp_file,FTP_ASCII,0)){'。 *請*注意我*不*告訴你這樣做,它應該被視爲最後的手段。 – DaveRandom

回答

2

你應該首先檢查文件是否使用ftp_fget功能之前確實存在。

您可以file_exists

if(file_exists($ftp_file)) 
{ 
    //do the stuff with ftp_fget 
} 
+0

我不認爲這會工作,因爲'$ ftp_file'將包含遠程路徑,相對於遠程服務器上的FTP用戶的根目錄。所以'file_exists' *可*返回true,但前提是文件服務器上存在... – DaveRandom

+1

@DaveRandom:如果您檢查PHP文檔此功能,'Tip'部分顯示了它的工作原理與'FTP: ' –

+0

是的,但是'$ ftp_file'不*不*包含完整'的ftp://服務器/路徑/到/ file' URL,它只包含在遠程系統上的文件路徑,即只是'/路徑/到/文件「部分。 – DaveRandom

1

檢查您可以在線抑制錯誤,如果你真的不使用@字符關心的錯誤。這僅適用於默認處理程序,其他記錄程序仍將記錄錯誤。

例子:

@ftp_fget(...) 

不會拋出,即使可能會出現錯誤的任何錯誤或警告。這裏有一個關於這種行爲的非常好的SO帖子: Suppress error with @ operator in PHP

+1

這是一個選項。像往常一樣,關於@的解釋略有不同。抑制運算符只能防止錯誤/警告顯示在PHP * default *錯誤處理程序中。自定義錯誤或日誌記錄處理程序仍然會收到該消息,並可能會記錄它。 – mario