code: private function getContentMd5($data)
      {
          $md5Hash = null;
  
          if (is_string($data)) {
              $md5Hash = md5($data, true);
          } else if (is_resource($data)) {
              // Assume $data is a stream.
              $streamMetadata = stream_get_meta_data($data);
  
              if ($streamMetadata['stream_type'] === 'MEMORY' || $streamMetadata['stream_type'] === 'TEMP') {
                  $md5Hash = md5(stream_get_contents($data), true);
              } else {
                  $md5Hash = md5_file($streamMetadata['uri'], true);
              }
          }
  
          return base64_encode($md5Hash);
      }
docs: Get the base64 encoded md5 value of $data. If $data is a memory or temp file stream, this
  method dumps the contents into a string before calculating the md5. Hence, this method
  shouldn't be used for large memory streams.
  
  @param string $data
  @return string