현재 위치: > 최신 기사 목록> chdir ()와 chroot ()의 차이점은 무엇입니까? 각각 어떤 PHP 시나리오에 효과가 있습니까?

chdir ()와 chroot ()의 차이점은 무엇입니까? 각각 어떤 PHP 시나리오에 효과가 있습니까?

gitbox 2025-06-08

php에서 chdir ()chroot () 는 현재 작업 디렉토리 또는 파일 시스템 루트 디렉토리와 관련된 두 가지 기능입니다. 비슷한 기능을 가지고 있지만 본질적으로 다릅니다. 개발자 가이 두 기능의 차이점과 어떤 시나리오를 적용하는지 이해하는 것이 매우 중요합니다. 이 기사는 차이점과 사용 시나리오를 자세히 소개합니다.

1. chdir () 함수

chdir () 는 PHP의 기능으로 현재 프로세스의 작업 디렉토리를 변경합니다. 이 기능의 기능은 현재 스크립트의 작업 디렉토리를 지정된 경로로 변경하여 상대 경로 파일에 대한 액세스에 영향을 미치는 것입니다. chdir ()을 사용하여 디렉토리를 변경하면 전체 시스템의 루트 디렉토리가 변경되지 않으며 현재 스크립트 프로세스에서만 유효합니다.

기능 프로토 타입 :

 bool chdir ( string $directory )
  • $ 디렉토리 : 대상 디렉토리의 경로.

:

 <?php
// 현재 작업 디렉토리를 출력하십시오
echo getcwd();  // 현재 디렉토리를 출력하십시오

// 작업 디렉토리를 변경하십시오
chdir('/var/www/html');

// 변경된 작업 디렉토리를 출력합니다
echo getcwd();  // 산출 "/var/www/html"
?>

위 코드에서 chdir ()를 사용하면 PHP 스크립트의 작업 디렉토리가 변경됩니다. 이는 후속 상대 경로 작업 이이 새로운 디렉토리를 기반으로 함을 의미합니다.

2. chroot () 함수

chroot () 는 다른 디렉토리 관련 PHP 함수이며 chdir () 와 매우 다릅니다. chroot () 의 목적은 현재 프로세스의 루트 디렉토리를 지정된 디렉토리로 변경하는 것입니다. 이 변경은 기본적이며 파일 시스템에 대한 전체 프로세스 액세스에 영향을 미치므로 프로세스가 루트 디렉토리 외부의 파일에 액세스 할 수 없습니다.

기능 프로토 타입 :

 bool chroot ( string $directory )
  • $ 디렉토리 : 지정된 새 루트 디렉토리.

:

 <?php
// 루트 디렉토리를 변경하십시오 /var/www
chroot('/var/www');

// 루트 디렉토리 외부의 경로에 액세스하려고 시도하면 실패합니다.
echo file_exists('/etc/passwd') ? 'File exists' : 'File not found';
?>

이 예에서 chroot ()는 현재 스크립트의 루트 디렉토리를 /var /www 로 변경합니다. 따라서 /etc /passwd 와 같은 시스템 레벨 파일에 액세스하려는 모든 시도는 새 루트 디렉토리에 의해 이미 제한되어 있기 때문에 실패합니다.

3. chdir ()와 chroot ()의 차이

  • 기능 범위 :

    • chdir ()는 프로세스의 루트 디렉토리에 영향을 미치지 않고 현재 프로세스의 작업 디렉토리 만 변경합니다. 상대 경로의 구문 분석에만 영향을 미치며 시스템 파일의 액세스 권한을 변경하지 않습니다.

    • chroot ()는 전체 프로세스의 루트 디렉토리를 변경하여 프로세스가 새 루트 디렉토리에서만 파일에만 액세스 할 수 있고 새 루트 디렉토리 외부의 파일에 액세스 할 수 없도록합니다.

  • 영향 범위 :

    • chdir () 는 현재 스크립트 또는 현재 PHP 프로세스에만 유효합니다.

    • chroot () 는 글로벌 영향이며 파일 액세스를 전체 프로세스로 제한합니다.

  • 보안 :

    • chdir () 는 비교적 간단하며 많은 보안 문제가 없지만 파일 경로의 구문 분석 만 변경합니다.

    • chroot () 는 더 "하드"이며 일반적으로 컨테이너화 및 샌드 박스 환경에서 사용되며 프로세스 파일 시스템 액세스를 제한하고 운영 체제 보안이 증가합니다.

4. 해당 시나리오

  • chdir ()에 적용 가능한 시나리오 :
    chdir () 는 종종 스크립트, 특히 많은 양의 파일을 처리 해야하는 PHP 응용 프로그램에서 디렉토리 전환에 사용됩니다. 다음 시나리오에서 특히 유용합니다.

    • 파일 업로드 처리 : 파일 업로드를 처리 할 때 업로드 후 파일을 저장할 수 있도록 작업 디렉토리를 특정 디렉토리로 전환해야 할 수도 있습니다.

    • 파일 검색 및 읽기 : 스크립트가 여러 디렉토리를 통과 해야하는 경우 chdir ()를 사용하여 작업 디렉토리를 변경하여 상대 경로를 사용하여 파일을 조작하는 데 편리합니다.

    • 명령 줄 스크립트 : PHP 명령 줄 인터페이스에서 chdir ()을 사용하여 작업 디렉토리를 변경하여 상대 경로의 정확성을 보장합니다.

  • chroot ()에 적용 가능한 시나리오 :
    chroot () 는 보안 요구 사항이 높고 다음 시나리오에서 일반적으로 발견됩니다.

    • 애플리케이션 샌드 박스 : 신뢰할 수없는 데이터를 처리하거나 더 높은 보안이 필요한 경우 chroot ()를 사용하여 프로세스를 특정 디렉토리로 제한하여 프로세스가 시스템의 다른 파일에 액세스하지 못하게 할 수 있습니다.

    • 가상 호스트 환경 : 다중 테넌트 서버의 경우 chroot ()를 사용하여 다른 사용자의 환경을 분리하고 사용자가 서로 액세스 할 수 없도록 할 수 있습니다.

    • 컨테이너화 기술 : 일부 컨테이너화 기술 (예 : Docker)은 chroot ()를 사용하여 호스트 운영 체제에서 응용 프로그램의 환경을 분리하여 컨테이너의 프로세스가 지정된 파일 시스템 부품에만 액세스 할 수 있도록합니다.

5. 요약

chdir ()chroot () 는 디렉토리 작업과 관련이 있지만 영향 범위와 사용 시나리오는 크게 다릅니다. chdir ()는 파일 시스템의 상대 경로 작업에 더 적합하지만 chroot ()는 보안 또는 컨테이너화가 높은 응용 프로그램에서 일반적으로 발견되는 더 엄격한 파일 시스템 액세스 제한에 더 적합합니다. PHP에서 chdir () 또는 chroot ()를 사용하도록 선택하는 것은 주로 응용 프로그램 요구 사항 및 보안 요구 사항에 따라 다릅니다.