Can I use file_get_contents() to compare two files?

后端 未结 7 1695
无人及你
无人及你 2020-12-03 03:09

I want to synchronize two directories. And I use

file_get_contents($source) === file_get_contents($dest)

to compare two files. Is there an

7条回答
  •  不思量自难忘°
    2020-12-03 03:38

    I would rather do something like this:

    function files_are_equal($a, $b)
    {
      // Check if filesize is different
      if(filesize($a) !== filesize($b))
          return false;
    
      // Check if content is different
      $ah = fopen($a, 'rb');
      $bh = fopen($b, 'rb');
    
      $result = true;
      while(!feof($ah))
      {
        if(fread($ah, 8192) != fread($bh, 8192))
        {
          $result = false;
          break;
        }
      }
    
      fclose($ah);
      fclose($bh);
    
      return $result;
    }
    

    This checks if the filesize is the same, and if it is it goes through the file step by step.

    • Checking the modified time check can be a quick way in some cases, but it doesn't really tell you anything other than that the files have been modified at different times. They still might have the same content.
    • Using sha1 or md5 might be a good idea, but this requires going through the whole file to create that hash. If this hash is something that could be stored and used later, then it's a different story probably, but yeah...

提交回复
热议问题