使用PHP检查远程FTP服务器上的文件是否存在重复内容

时间:2014-01-29 09:33:17

标签: php ftp

我编写了一个脚本,使用PHP将本地文件传输到远程FTP服务器上的文件夹结构中。我目前正在使用ftp_connect()连接到远程服务器,ftp_put()用于传输文件,在本例中为CSV文件。

我的问题是,如何验证文件的内容(在远程FTP服务器上)是否与本地文件的内容重复?有没有办法解析有问题的远程文件的内容,以及本地版本,然后使用PHP函数进行比较?

我尝试分别使用filesize()和使用ftp_size()的远程文件比较本地文件的文件大小。但是,即使使用不同的数据,但字符数相同,也会因为文件大小的字节数相同而产生误报。

请注意,有问题的FTP不在我的控制之下,因此我无法在远程服务器上放置任何脚本。

更新

感谢Mark和gafreax,这是最终的工作代码:

$temp_local_file = fopen($conf['absolute_installation_path'] . 'data/temp/ftp_temp.csv', 'w');
if ( ftp_fget($connection, $temp_local_file, $remote_filename, FTP_ASCII) ) {
    $temp_local_stream = file_get_contents($conf['absolute_installation_path'] . 'data/temp/ftp_temp.csv');
    $local_stream = file_get_contents($conf['absolute_installation_path'] . $local_filename);
    $temp_hash = md5($temp_local_stream);
    $local_hash = md5($local_stream);
    if($temp_hash !== $local_hash) {
        $remote_file_duplicate = FALSE;
    } else {
        $remote_file_duplicate = TRUE;
    }                       
}

2 个答案:

答案 0 :(得分:1)

您可以使用像md5这样的散列函数,如果它们匹配,则检查两个生成的md5。

例如:

 $a = file_get_contents('a_local');
 $b = file_get_contents('b_local');
 $a_hash = md5($a);
 $b_hash = md5($b);
 if($a_hash !== $b_hash) 
    echo "File differ";
 else 
    echo "File are the same";

md5函数可以避免在读取文件上的奇怪数据时出现问题

答案 1 :(得分:1)

您还可以比较每个文件的上次修改时间。只有当本地文件比远程文件更新时,才会上传本地文件。请参阅filemtimeftp_mdtm。这两个都返回一个可以轻松比较的UNIX时间戳。这比获取文件内容和计算哈希更快。