我编写了一个脚本,使用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;
}
}
答案 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)