ホームページ  >  記事  >  バックエンド開発  >  PHPを使用して2つのフォルダーの類似点と相違点を比較する

PHPを使用して2つのフォルダーの類似点と相違点を比較する

WBOY
WBOYオリジナル
2016-07-25 09:11:161111ブラウズ
要件: ファイルの違いを含む 2 つのフォルダー間の違いを比較するには、コマンド ラインのみを使用できます。
思考: Linux では diff がありますが。 。 。 。 PHP を使用してみましょう。コードの変更は簡単かつ迅速です。以下では .svn ディレクトリの比較は省略します。 ファイルはMD5チェックサムと比較する必要があります
アイデア: 1) 最初のパスを標準パスとして使用し、最初のパスにあるが 2 番目のパスにないファイルまたはフォルダー、または別のファイルをリストします。 2) 次に、2 番目のパスには存在するが、最初のパスには存在しないファイルとフォルダーをリストします。
呼び出し例: php Compare_folder.php /home/temp/2 /home/temp/55 //JAVAEYEより転載
/**
  • * ツールファイル
  • * 目的は 2 つのフォルダーを再帰的に比較することです
  • *
  • * 呼び出し例
  • * php Compare_folder.php /home/temp/2 /home/temp/55
  • *
  • */
  • //パラメータ決定
  • if (count($argv) > 1 )
  • $dir1 = del_postfix($argv[1]);
  • $dir1 = '/';
  • if (count($argv) > 2 )
  • $dir2 = del_postfix($argv[2]);
  • else
  • //最初の 1 つのパスにはそれがありますが、後者にはそれがないか、間違った方法があります。
  • process_compare($dir1, $dir2, 0);
  • echo "================================= === ========================n";
  • //2 番目のパスに余分なフォルダーまたはファイルがないか確認します
  • process_compare($dir2, $ dir1 , 1);
  • echo "すべて OKn";
  • /**
  • * パスの末尾の / を削除し、絶対パスであることを確認してください
  • *
  • * @paramknown_type $dir
  • * @returnunknown
  • */
  • function del_postfix($dir)
  • {
  • if (!preg_match('#^/#', $dir)) {
  • throw new Exception('パラメータは絶対パスでなければなりません');
  • $dir = preg_replace('#/$#', '', $dir);
  • /* *
  • * 再帰メソッドを呼び出して比較を実装するパブリック関数
  • *
  • * 標準パスとして @param string $dir1
  • * @param string $dir2 比較に使用されるパス
  • * @param int $only_check_has 1 はファイルがないことを意味します差分が比較されます。値 0 は、ファイルの md5 チェックサムも比較する必要があることを意味します
  • */
  • function process_compare($dir1, $dir2, $only_check_has){
  • Compare_file_folder($dir1, $dir1, $dir2, $only_check_has)
  • }
  • /**
  • * 実数関数、プライベート関数
  • *
  • * @param string $dir1 パス 1、標準です
  • * @param string $base_dir1 変更されないパラメーター パス 2
  • * @param string $base_dir2 変更されない比較対象のパス 2
  • * @ param int $only_check_has 1 の場合、ファイルの差分が比較されないことを意味します。 0 の場合、ファイルの md5 チェックサムも比較されることを意味します。*/
  • function Compare_file_folder( $dir1, $base_dir1, $base_dir2, $only_check_has=0){
  • if (is_dir($dir1)) {
  • $handle = dir($dir1)
  • if ($dh = opendir($dir1);
  • while ($entry = $handle->read()) {
  • if (($entry != ".") && ($entry != "..") && ($entry != ".svn") ){
  • $new = $dir1."/".$entry;
  • //echo 'compare: ' . $new . "n";
  • $other = preg_replace('#^'. $base_dir1 .'#' , $base_dir2 , $new);
  • if(is_dir($new)) {
  • //比較
  • if (!is_dir($other)) {
  • 方向が見つかりません: ' (' . $new .")n";
  • }
  • Compare_file_folder($new, $base_dir1,$base_dir2, $only_check_has) ;
  • } else { //1 がファイルの場合、2 もファイルである必要があります
  • if (!is_file ($other) ) {
  • echo '!!ファイルが見つかりません: ' ('.$new .")n"
  • }elseif ($only_check_has ==0 && ( md5_file($other) != md5_file($new ) ){
  • echo '!!file md5 エラー: ' ('.$new .")n"
  • }
  • }
  • }
  • Closedir($dh); }
  • }
  • }
  • ?>
  • コードをコピー
  • 声明:
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。