2011-10-24 52 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