Last time I shared differences in comparative text, this time I made a comparison of folder changes-PHP source code

Source: Internet
Author: User
The last time I shared the differences between the comparative text, this time I will compare the changes in the folder. this class can compare the files in the two directories and find the changes.
It traverses the list of files retrieved from two directories.
This class can list which files are added, deleted, or modified.

 source = $source;}public function set_update($update) {$this->update = $update;}public function get_source() {return $this->source;}public function get_update() {return $this->update;}public function get_removed() {return $this->removed;}public function get_added() {return $this->added;}public function get_changed() {return $this->changed;}public function do_compare(){ $source = Array(); $destination = Array(); $currentDirectory = getcwd(); $workingDir = '';chdir($this->source); $source = $this->doTree('.', $source); if (!is_array($source)) return; chdir ($this->update); $destination = $this->doTree('.', $destination); if (!is_array($destination)) exit;chdir($currentDirectory); foreach ($source as $dir => $value) { foreach($value as $file => $hash) { if (isset($destination[$dir][$file])) { if ($hash != $destination[$dir][$file]) { $this->changed[] = $dir.'/'.$file;} } else { $this->removed[] = $dir.'/'.$file;}}} foreach ($destination as $dir => $value) { foreach($value as $file => $hash) { if (!isset($source[$dir][$file])) { $this->added[] = $dir.'/'.$file;}}}}private function checksum($file) { $ignores = Array(10, 13); $fh = fopen($file, 'r'); $buffer = ''; while (!feof($fh)) { $buffer .= fgets($fh);} fclose ($fh); foreach ($ignores as $ignore) { while (strpos($buffer, chr($ignore))) { $buffer = str_replace(chr($ignore), '', $buffer);}} return hash('crc32', $buffer).hash('crc32b', $buffer);}private function doTree($dir, &$array) { if (stripos($dir, 'checksum') !== false || stripos($dir, 'cache') !== false || stripos($dir, 'import') !== false || stripos($dir, 'custom') !== false || stripos($dir, '_notes') !== false || stripos($dir, '.svn') !== false) { return $array;} $filetypes = Array('php', 'js', 'htm', 'html', 'css', 'tpl', 'ini', 'txt'); if ($dh = opendir($dir)) { while ($file = readdir($dh)) { if ($file != '.' && $file != '..') { if (is_dir($dir.'/'.$file)) { if (count($array) == 0) $array[0] = 'Temp'; if (!$this->doTree($dir.'/'.$file, $array)) { return false;} } else { if (filesize($dir.'/'.$file)) { foreach ($filetypes as $type) { if (strpos($file.'|', '.'.$type.'|') != 0 ) {set_time_limit(30); $array[$dir][$file] = $this->checksum( $dir.'/'.$file ); //md5_file($dir.'/'.$file, false);}}}}}} if (count($array) > 1 && isset($array['0'])) unset($array['0']); return $array; } else { echo 'error opening '.$dir.''; return false;}}}
 http://www.codepearl.comUpgrade checker
 set_source($dir.'Source');// Directory where Source files are $cmp->set_update($dir.'Update');// Directory where pristeen files are $cmp->do_compare();// Do the compare $removed = $cmp->get_removed();// Get the results $added = $cmp->get_added();// ... $changed = $cmp->get_changed();// ... echo 'Files Changed';// Display the results foreach($changed as $file) { echo $file.' has been changed
';} echo 'Files Added'; foreach ($added as $add) { echo $add.'
';} echo 'Files Removed'; foreach ($removed as $remove) { echo $remove.'
';}?>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.