ホームページ  >  記事  >  バックエンド開発  >  PHP はフォルダーの違いの比較を実装します

PHP はフォルダーの違いの比較を実装します

*文
*文オリジナル
2017-12-26 15:48:202495ブラウズ

PHPでフォルダーの違いの比較を実装するにはどうすればよいですか?この記事では、PHP のディレクトリとファイル名の再帰操作スキルを使用して、PHP で 2 つのフォルダーの類似点と相違点を比較する方法を主に紹介します。お役に立てれば幸いです。

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

要件:

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

考え:

Linux では diff がありますが。 。 。 。 PHP を使用してみましょう。コードの変更は簡単で、高速です。以下では、ファイルを md5 チェックサムと比較する必要があります。1) 最初のパスを標準パスとして使用します。 list 最初のパスには存在するが 2 番目のパスには存在しない、または異なるファイルであるファイルまたはフォルダーを抽出します。
2) 次に、2 番目のパスには存在するが、最初のパスには存在しないファイルとフォルダーをリストします。

呼び出しの例:

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

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

<?php 
/** 
 * 工具文件 
 * 目的在于递归比较两个文件夹 
 * 
 * 调用示例 
 * php compare_folder.php /home/temp/2 /home/temp/55 
 * 
 */ 
//参数确定 
if (count($argv) > 1 ) 
 $dir1 = del_postfix($argv[1]); 
else 
 $dir1 = &#39;/&#39;; 
if (count($argv) > 2 ) 
 $dir2 = del_postfix($argv[2]); 
else 
 $dir2 = &#39;/&#39;; 
//检查第一个路径有,后者没有或错误的方法。 
process_compare($dir1, $dir2, 0); 
echo "===========================================================\n"; 
//检查第2个路径的多余文件夹或文件 
process_compare($dir2 , $dir1, 1); 
echo "all OK\n"; 
/** 
 * 去除路径末尾的/,并确保是绝对路径 
 * 
 * @param unknown_type $dir 
 * @return unknown 
 */ 
function del_postfix($dir) 
{ 
 if (!preg_match(&#39;#^/#&#39;, $dir)) { 
  throw new Exception(&#39;参数必须是绝对路径&#39;); 
 } 
 $dir = preg_replace(&#39;#/$#&#39;, &#39;&#39;, $dir); 
 return $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 &#39;compare: &#39; . $new . "\n"; 
     $other = preg_replace(&#39;#^&#39;. $base_dir1 .&#39;#&#39; , $base_dir2, $new); 
     if(is_dir($new)) { 
      //比较 
      if (!is_dir($other)) { 
       echo &#39;!!not found direction: &#39;. $other. &#39; (&#39; . $new .")\n"; 
      } 
      compare_file_folder($new, $base_dir1,$base_dir2, $only_check_has) ; 
     } else { //如果1是文件,则2也应该是文件 
      if (!is_file($other)) { 
       echo &#39;!!not found file:  &#39;. $other. &#39; (&#39;.$new .")\n"; 
      }elseif ($only_check_has ==0 && ( md5_file($other) != md5_file($new) ) ){ 
       echo &#39;!!file md5 error:  &#39;. $other. &#39; (&#39;.$new .")\n"; 
      } 
     } 
    } 
   } 
   closedir($dh); 
  } 
 } 
} 
?>

関連する推奨事項:


phpファイルの読み込み 一連の方法の詳細説明

PHPファイルの走査

phpフォルダ操作

以上がPHP はフォルダーの違いの比較を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。