ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルで 2 つのフォルダーの類似点と相違点を比較する方法

PHP_PHP チュートリアルで 2 つのフォルダーの類似点と相違点を比較する方法

WBOY
WBOYオリジナル
2016-07-13 09:49:52792ブラウズ

phpで2つのフォルダーの類似点と相違点を比較する方法

この記事では、phpで2つのフォルダーの類似点と相違点を比較する方法の例について説明します。皆さんの参考に共有してください。具体的な分析は次のとおりです:

要件:

ファイルの違いを含め、2 つのフォルダー間の違いを比較するには、コマンド ラインのみを使用できます。

考え中:

Linux下ではdiffはありますが。 。 。 。コードの修正は簡単かつ迅速に PHP を使用しましょう。以下では .svn ディレクトリの比較は省略します。

ファイルは md5 チェックサムと比較する必要があります

アイデア:

1) 最初のパスを標準パスとして使用し、最初のパスにはあるが 2 番目のパスには存在しない、または異なるファイルであるファイルまたはフォルダーをリストします。

2) 次に、2 番目のパスには存在するが、1 番目のパスには存在しないファイルとフォルダーをリストします。

通話例:

php Compare_folder.php /home/temp/2 /home/temp/55

コードは次のとおりです:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

/**

* ツールファイル

* 目的は 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]);

その他

$dir2 = '/';

//最初のパスが存在することを確認し、後者は存在しないか、間違っていることを確認します。

process_compare($dir1, $dir2, 0);

エコー「============================================= = ============n";

//余分なフォルダーまたはファイルがないか 2 番目のパスを確認します

process_compare($dir2, $dir1, 1);

「すべて OKn」をエコーし​​ます;

/**

* パスの末尾の / を削除し、絶対パスであることを確認してください

*

* @param 不明なタイプ $dir

* @return 不明

*/

関数 del_postfix($dir)

{

if (!preg_match('#^/#', $dir)) {

throw new Exception('パラメータは絶対パスである必要があります');

}

$dir = preg_replace('#/$#', '', $dir);

$dir を返す;

}

/**

* 比較を実装するために再帰的メソッドを呼び出すパブリック関数

*

* @param string $dir1 を標準パスとして使用します

* @param string $dir2 比較に使用されるパス

* @param int $only_check_has 1の場合はファイルの差分を比較しないことを意味し、0の場合はファイルのmd5チェックサムも比較することを意味します

*/

関数 process_compare($dir1, $dir2, $only_check_has){

compare_file_folder($dir1, $dir1, $dir2, $only_check_has);

}

/**

* 実関数、プライベート関数

*

* @param string $dir1 path 1、標準です

* @param string $base_dir1 パラメータパス 2 は変更されません

* @param string $base_dir2 比較対象のパス 2 は変更されていません

* @param int $only_check_has 1 の場合、ファイルの差分を比較しないことを意味し、0 の場合、ファイルの md5 チェックサムも比較する必要があることを意味します

*

*/

関数 Compare_file_folder($dir1, $base_dir1, $base_dir2, $only_check_has=0){

if (is_dir($dir1)) {

$ハンドル = dir($dir1);

if ($dh = opendir($dir1)) {

while ($entry = $handle->read()) {

if (($entry != ".") && ($entry != "..") && ($entry != ".svn")){

$new = $dir1."/".$entry;

//echo '比較: ' 。 $new 。 「ん」;

$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)) {

エコー「!!ファイルが見つかりません: 」。 $その他。 ' ('.$new .")n";

}elseif ($only_check_has ==0 && ( md5_file($other) != md5_file($new) ) ){

エコー「!!ファイル md5 エラー: 」。 $その他。 ' ('.$new .")n";

}

}

}

}

closedir($dh);

}

}

}

?>

ここに記載されている大家のphpプログラムの設計に役立つことを希望します。

http://www.bkjia.com/PHPjc/1018932.html

本当http://www.bkjia.com/PHPjc/1018932.html技術記事 php が 2 つのファイルを同一に比較する方法 本書の例では、php が 2 つのファイルを同一に比較する方法を説明しています。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。