>  기사  >  백엔드 개발  >  한 디렉토리의 모든 내용을 PHP의 다른 디렉토리로 복사

한 디렉토리의 모든 내용을 PHP의 다른 디렉토리로 복사

WBOY
WBOY앞으로
2023-08-29 14:41:062110검색

한 디렉토리의 모든 내용을 PHP의 다른 디렉토리로 복사

PHP란 무엇인가요?

PHP는 Hypertext Preprocessor의 약자로 주로 웹 개발에 널리 사용되는 서버 측 스크립팅 언어입니다. 이는 개발자에게 동적 웹 페이지와 애플리케이션을 만들 수 있는 강력하고 유연한 플랫폼을 제공합니다. PHP는 HTML 코드에 포함될 수 있으므로 서버측 기능과 클라이언트측 요소를 완벽하게 통합할 수 있습니다. 구문은 C 및 Perl과 유사하므로 이러한 언어에 익숙한 프로그래머가 비교적 쉽게 배우고 사용할 수 있습니다. PHP를 사용하면 서버 측 스크립트를 웹 서버에서 실행하여 사용자 브라우저에 전달할 수 있는 동적 콘텐츠를 생성할 수 있습니다. 다양한 데이터베이스를 지원하며, 데이터베이스 기반 웹사이트 개발에 적합합니다. 또한 PHP는 신속한 개발을 촉진하고 코드 재사용성을 향상시키는 광범위한 오픈 소스 라이브러리 및 프레임워크 생태계를 제공합니다. 강력한 커뮤니티 지원과 광범위한 문서를 통해 PHP는 전 세계 웹 개발자들 사이에서 여전히 인기 있는 선택입니다.

PHP 한 디렉터리의 전체 내용을 다른 디렉터리로 복사

여기에서는 scandir() 및 RecursiveIteratorIterator 클래스를 사용하여 한 디렉터리의 전체 내용을 다른 디렉터리로 복사합니다.

방법 1

scandir() 사용

그런 다음 scandir()은 여러 인수를 받아들이고 오류가 발생하지 않으면 디렉터리에 있는 파일 이름 목록을 반환합니다.

문법

으아아아
  • $directory(string): 스캔할 디렉터리의 경로입니다.

  • $sorting_order (int, 선택사항): 결과의 정렬 순서를 지정합니다. 다음 값 중 하나를 사용할 수 있습니다.

  • SCANDIR_SORT_ASCENDING(기본값): 결과를 오름차순으로 정렬합니다.

  • SCANDIR_SORT_DESCENDING: 결과를 내림차순으로 정렬합니다.

  • SCANDIR_SORT_NONE: 정렬이 수행되지 않습니다.

  • $context (resource|null, 선택 사항): stream_context_create()를 사용하여 생성된 컨텍스트 리소스를 지정합니다. scandir() 함수의 동작을 수정하는 데 사용됩니다. 제공되지 않으면 null이 사용됩니다.

  • 반환 값: scandir() 함수는 지정된 디렉터리에 있는 파일 이름과 디렉터리의 배열을 반환합니다. 여기에는 일반 파일과 디렉터리가 포함됩니다. 결과 배열에는 특수 항목이 포함됩니다. 및 ..는 각각 현재 디렉터리와 상위 디렉터리를 나타냅니다.

다음은 PHP에서 한 디렉토리의 전체 내용을 다른 디렉토리로 복사하기 위해 scandir()을 사용하는 방법의 예입니다.

으아아아

출력

으아아아

코드 설명

이 코드는 소스 디렉터리의 내용을 대상 디렉터리로 재귀적으로 복사하는 copyDirectory라는 함수를 정의합니다. 이 함수는 먼저 대상 디렉터리가 존재하지 않는지 확인하고 필요한 경우 mkdir()을 사용하여 디렉터리를 생성합니다. 그런 다음 scandir()을 사용하여 소스 디렉터리의 파일 및 디렉터리 목록을 검색합니다. . 및 .. 항목을 제외한 각 항목을 반복하고 소스 및 대상 파일 경로를 구성합니다. 항목이 디렉터리인 경우 함수는 새 경로를 사용하여 자신을 재귀적으로 호출합니다. 파일인 경우 copy() 함수를 사용하여 원본에서 대상으로 파일을 복사합니다. 이 프로세스는 하위 디렉터리와 해당 파일을 포함하여 소스 디렉터리의 모든 내용이 대상 디렉터리에 복사될 때까지 계속됩니다. 마지막으로 복사 작업을 수행하기 위해 인수로 제공된 원본 및 대상 디렉터리를 사용하여 함수가 호출됩니다.

방법 2

RecursiveDirectoryIterator와 함께 RecursiveIteratorIterator 클래스를 사용하세요.

여기에서는 두 가지 클래스를 사용하여 작업을 완료합니다.

문법

으아아아
  • $pathname(string): 생성할 디렉터리의 경로입니다.

  • $mode(int, 선택): 새로 생성된 디렉터리에 대해 설정하는 권한입니다. 8진수 값으로 지정됩니다.

  • $recursive(부울, 선택 사항): true로 설정하면 상위 디렉터리를 재귀적으로 생성할 수 있습니다.

  • $context (resource|null, 선택 사항): stream_context_create()를 사용하여 생성된 컨텍스트 리소스를 지정합니다.

  • 반환 값: mkdir() 함수는 성공하면 true를, 실패하면 false를 반환합니다.

위 방법을 사용한 예는 다음과 같습니다.

으아아아

출력

으아아아

코드 설명:

이 코드는 소스 디렉터리의 내용을 대상 디렉터리로 재귀적으로 복사하는 copyDirectory라는 함수를 정의합니다. 이 함수는 먼저 대상 디렉터리가 존재하지 않는지 확인하고 필요한 경우 mkdir()을 사용하여 디렉터리를 생성합니다. 그런 다음 scandir()을 사용하여 소스 디렉터리의 파일 및 디렉터리 목록을 검색합니다. . 및 .. 항목을 제외한 각 항목을 반복하고 소스 및 대상 파일 경로를 구성합니다. 항목이 디렉터리인 경우 함수는 새 경로를 사용하여 자신을 재귀적으로 호출합니다. 파일인 경우 copy() 함수를 사용하여 원본에서 대상으로 파일을 복사합니다. 이 프로세스는 하위 디렉터리와 해당 파일을 포함하여 소스 디렉터리의 모든 내용이 대상 디렉터리에 복사될 때까지 계속됩니다. 마지막으로 복사 작업을 수행하기 위해 인수로 제공된 원본 및 대상 디렉터리를 사용하여 함수가 호출됩니다.

方法2

将 RecursiveIteratorIterator 类与 RecursiveDirectoryIterator 一起使用

这里我们将使用两个类来完成任务。

语法

bool mkdir(string $pathname, int $mode = 0777, bool $recursive = 
false, resource|null $context = null)
  • $pathname(字符串):要创建的目录的路径。

  • $mode(int,可选):为新创建的目录设置的权限。它被指定为八进制值。

  • $recursive(布尔型,可选):如果设置为 true,则启用父目录的递归创建。

  • $context(resource|null,可选):指定使用stream_context_create()创建的上下文资源。

  • 返回值:mkdir() 函数在成功时返回 true,在失败时返回 false。

示例

这里是使用上述方法的一个例子。

function copyDirectory($source, $destination) {
   if (!is_dir($destination)) {
      mkdir($destination, 0755, true);
   }
   $iterator = new RecursiveIteratorIterator(
      new RecursiveDirectoryIterator($source, RecursiveDirectoryIterator::SKIP_DOTS),
      RecursiveIteratorIterator::SELF_FIRST
   );
   foreach ($iterator as $item) {
      if ($item->isDir()) {
         $dir = $destination . '/' . $iterator->getSubPathName();
         if (!is_dir($dir)) {
            mkdir($dir, 0755, true);
         }
      } else {
         $file = $destination . '/' . $iterator->getSubPathName();
         copy($item, $file);
      }
   }
}
$sourceDirectory = '/source/directory';
$destinationDirectory = '/destination/directory';
copyDirectory($sourceDirectory, $destinationDirectory);

代码说明

在此方法中,RecursiveDirectoryIterator 用于迭代目录结构,包括所有子目录和文件。 RecursiveIteratorIterator 有助于递归地遍历迭代器。它会跳过 .和 .. 使用 SKIP_DOTS 标志的条目。在循环内,它检查当前项是否是目录。如果是这样,它会使用 mkdir() 在目标路径中创建相应的目录(如果该目录尚不存在)。如果该项目是文件,它将构造目标文件路径并使用 copy() 复制文件。此方法消除了对单独递归函数的需要,并通过利用内置 PHP 迭代器类的功能简化了代码。

结论

综上所述,两种方法都可以达到预期的结果,但第二种使用迭代器的方法提供了更优雅、更高效的解决方案,特别是对于涉及大型目录结构的场景。不过,这两种方法的选择最终取决于开发者的具体要求和偏好。

위 내용은 한 디렉토리의 모든 내용을 PHP의 다른 디렉토리로 복사의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제