>백엔드 개발 >PHP 튜토리얼 >디렉토리 및 파일 이름에 대한 PHP 재귀 작업 방법

디렉토리 및 파일 이름에 대한 PHP 재귀 작업 방법

墨辰丷
墨辰丷원래의
2018-06-09 15:37:441912검색

이 글은 주로 PHP의 디렉토리와 파일 이름의 재귀 연산 방법을 소개합니다. 관심 있는 친구들이 참고하면 도움이 될 것입니다.

이 문서의 예에서는 PHP에서 두 폴더의 유사점과 차이점을 비교하는 방법을 설명합니다. 구체적인 분석은 다음과 같습니다.

요구 사항:

두 폴더 간의 차이점을 비교하려면 명령줄만 사용할 수 있습니다. 파일 차이를 포함한 폴더.

생각:

리눅스에는 차이가 있지만. . . . PHP를 사용하면 코드 변경이 쉽고 빠릅니다. 다음은 .svn 디렉터리 비교를 제외합니다. 아이디어:

1) 첫 번째 경로를 표준 경로로 사용하고 list 첫 번째 경로에는 있지만 두 번째 경로에는 없는 파일 또는 폴더를 추출하거나 다른 파일입니다. 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 템플릿과 js 업로드 플러그인을 결합하여 새로 고침 없는 업로드를 달성하는 방법

php 숫자 및 숫자 연산 확인 코드

php는 체인 호출을 사용하여 지속적으로 호출합니다. 기능 사용법

위 내용은 디렉토리 및 파일 이름에 대한 PHP 재귀 작업 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.